Как вы описываете нового для нового студента CS? - PullRequest
1 голос
/ 29 октября 2010

В ООП есть сущности (например, Персона), которые имеют атрибуты (например, имя, адрес и т. Д.) И имеют методы.Как вы описываете new?Это метод или просто специальный токен, чтобы привести абстрактную сущность к реальной?

Ответы [ 12 ]

6 голосов
/ 29 октября 2010

Вашему студенту CS? Не приукрашивайте это, они должны быть в состоянии быстро разобраться в концепциях и использовать метафоры, не связанные с компьютерной областью, в то время как попытка объяснить это своей 80-летней бабушке не поможет много студентов CS.

Проще говоря, скажите им, что класс - это спецификация для чего-либо, а объект - конкретный экземпляр этого чего-либо. Все, что new делает, - это создает конкретный экземпляр на основе спецификации. Это включает в себя как создание (не обязательно специфичное для класса, поэтому я бы не стал называть его методом, зарезервировав этот термин для функций, связанных с классом) и инициализация (что равно класс-специфический).

6 голосов
/ 29 октября 2010

Иногда это метод, иногда это просто синтаксический сахар, который вызывает метод распределителя. Язык имеет значение.

5 голосов
/ 29 октября 2010

В зависимости от языка new - это ключевое слово, которое можно использовать в качестве оператора или модификатора.Например, в C # new можно использовать :

  • оператор new - используется для создания объектов в куче и вызова конструкторов.
  • new modifier - используется для скрытияунаследованный член от члена базового класса

Для новых учеников я бы описал new только как ключевое слово и исключил модификатор из обсуждения.Я описываю классы как чертежи, а new как механизм, с помощью которого эти чертежи превращаются во что-то материальное - объекты.

Возможно, вы захотите проверить мой вопрос: Как научить объектно-ориентированное программирование процедурным программистам за другие замечательные ответы по обучению ООП новым разработчикам.

3 голосов
/ 29 октября 2010

В большинстве объектно-ориентированных языков new - это просто соглашение для именования фабричного метода.Но это только одно из многих соглашений.

Например, в Ruby принято называть фабричный метод [] для классов коллекций.В Python классы - это просто собственные фабрики.В Io фабричный метод обычно называется clone, в Ioke и Seph он называется mimic.

В Smalltalk фабричные методы часто имеют больше описательных имен, чем просто new:.Что-то вроде fromList: или with:.

2 голосов
/ 29 октября 2010

Smalltalk: это метод экземпляра в метаклассе.Итак, «new - это метод, который возвращает вновь выделенный экземпляр».

2 голосов
/ 29 октября 2010

Вот сравнение, которое работало для меня в прошлом.

Определение объекта - Jello Mold.«новый» - это процесс, который на самом деле делает закуску из желе из этой плесени.Каждая вещь Goopy Jello, которую вы дарите своим новым соседям, может быть разной: эта зелёная, в этой есть кусочки фруктов и т. Д. Это свой уникальный объект.Но форма та же самая.

Или вы можете использовать заводскую аналогию или что-то в этом роде (или чертежи против строительства).

Что касается его роли в синтаксисе, это просто ключевое словопозволяет компилятору узнать выделенную память в куче и запустить конструктор.Там не так много всего.

1 голос
/ 30 октября 2010

new в большинстве языков делает некоторые вариации следующего:

  1. обозначает некоторую область памяти для экземпляра класса, и, если необходимо, информирует сборщик мусора о том, как освободить эту память позже.
  2. инициализируют эту область памяти способом, характерным для этого класса, преобразовывая байты необработанной памяти в байты действительного экземпляра класса
  3. , возвращая ссылку на местоположение в памяти для вызывающей стороны.
1 голос
/ 29 октября 2010

Вы можете сказать, что класс - это прототип / план объекта. Когда вы даете ему ключевое слово new, этот прототип / проект оживает. Как будто вы даете дыхание жизни этим мертвым экземплярам.

1 голос
/ 29 октября 2010

В Ruby я считаю, что это метод экземпляра в метаклассе.В CLOS это общая функция, называемая make-instance, но в остальном она примерно одинакова.

В некоторых языках, таких как Java, new имеет специальный синтаксис, а часть метакласса скрыта.В том случае, когда вам нужно научить кого-то из них ооо с таким языком, я не знаю, что вы можете многое сделать.(Отрыв от обучения ОО и Java обучению второй объектной системе почти наверняка просто еще больше запутает их!) Просто объясните, что она делает, и что это особый случай.

1 голос
/ 29 октября 2010

В Java

  • new выделяет память для нового экземпляра класса (объекта)
  • new запускает конструктор класса для инициализации этого экземпляра
  • new возвращает ссылку на этот новый экземпляр

Что касается отношений между объектом / экземпляром и классом, я иногда думаю:

класс предназначен для экземпляр как план предназначен для здание

...