09.07.2008, 00:18
|
#6
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
Цитата:
Сообщение от NNB
Стало любопытно умеет init() класса того, что не умеет new()
Не сочтите за снобизм, но напомнило Joel on Software, Назад, к основам:
Цитата:
Я придерживаюсь мнения, что студенты, начинающие изучать программирование, должны начинать с начала, использовать C и подниматься вверх от процессора. Мне противно, как часто программа обучения строится на посылке, что Java представляет собой хороший язык для того, чтобы начинать программировать, потому что это так "просто" и не нужно отвлекаться на эти скучные детали про строки и выделение памяти, и сразу можно изучить кульные ООП-штучки которые помогут сделать ваши большие программы так восхитительно модульными.
Так вот, основы применительно к данной теме состоят в том, что при динамическом создании объекта надо, видите ли, выделять для него память. Именно этим и занимается, кроме прочего, метод new() в Аксапте, даже если вы его не перекрываете и ничего явно не инициализируете. При вызове этого метода, кроме прочего, происходит самое что ни на есть физическое выделение памяти для объекта (экземпляра класса, как угодно); другое дело, что Аксапта скрывает такие подробности, потому что обеспечивает автоматическое управление памятью, и начинает, видимо, казаться, что создать объект и инициализировать его - это одно и то же. Ан-нет... И еще обратите внимание, что метод new() вызывается для класса (т.е. типа данных), в то время как init() вызывается для объекта (экземпляра класса). Наглядно - даже, наврено, слишком наглядно - это все можно наблюдать в отладчике: если следить за переменной, которой присваивается ссылка на создаваемый объект, то пока вы не выйдите успешно из метода new(), ссылка эта показывается пустой, а как только объект создан, она уже показывается как ссылающаяся на экземпляр определенного класса со всеми его внутренними переменными.
В общем-то, все ключевые слова тут уже упоминали; если вы прежде изучали ООП, то разница между конструктором класса и методом класса должна вам все объяснить.
|
|