Тема: new() и init()
Показать сообщение отдельно
Старый 09.07.2008, 00:18   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от NNB Посмотреть сообщение
Стало любопытно умеет init() класса того, что не умеет new()
Не сочтите за снобизм, но напомнило Joel on Software, Назад, к основам:
Цитата:
Я придерживаюсь мнения, что студенты, начинающие изучать программирование, должны начинать с начала, использовать C и подниматься вверх от процессора. Мне противно, как часто программа обучения строится на посылке, что Java представляет собой хороший язык для того, чтобы начинать программировать, потому что это так "просто" и не нужно отвлекаться на эти скучные детали про строки и выделение памяти, и сразу можно изучить кульные ООП-штучки которые помогут сделать ваши большие программы так восхитительно модульными.
Так вот, основы применительно к данной теме состоят в том, что при динамическом создании объекта надо, видите ли, выделять для него память. Именно этим и занимается, кроме прочего, метод new() в Аксапте, даже если вы его не перекрываете и ничего явно не инициализируете. При вызове этого метода, кроме прочего, происходит самое что ни на есть физическое выделение памяти для объекта (экземпляра класса, как угодно); другое дело, что Аксапта скрывает такие подробности, потому что обеспечивает автоматическое управление памятью, и начинает, видимо, казаться, что создать объект и инициализировать его - это одно и то же. Ан-нет... И еще обратите внимание, что метод new() вызывается для класса (т.е. типа данных), в то время как init() вызывается для объекта (экземпляра класса). Наглядно - даже, наврено, слишком наглядно - это все можно наблюдать в отладчике: если следить за переменной, которой присваивается ссылка на создаваемый объект, то пока вы не выйдите успешно из метода new(), ссылка эта показывается пустой, а как только объект создан, она уже показывается как ссылающаяся на экземпляр определенного класса со всеми его внутренними переменными.
В общем-то, все ключевые слова тут уже упоминали; если вы прежде изучали ООП, то разница между конструктором класса и методом класса должна вам все объяснить.