Объектно-ориентированное программирование: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Деструкторы и финализация: добавлено о Java и Си++
Строка 170:
=== Деструкторы и финализация ===
 
Свойство: Деструктор играет роль противоположную конструктору и обычно вызывается при уничтожении объекта. Если конструктор нужен большинству классов, то только некоторые из них нуждаются в деструкторе. Деструктор в основном должениспользуется для освободитьосвобождения ресурсыресурсов, зарезервированныезарезервированных конструктором (или другими методами во время жизни объекта). Эти ресурсы включают память, файлы, базы данных, ресурсы Windows и т. д.
 
'''C++: В C++''' деструкторы автоматически вызываются автоматически, когда объект выходит из области определения или когда вы удаляете объект, заведенный динамически. У каждого класса есть только один деструктор. Если объект создан в куче, то он не может быть автоматически удален и если не объявить деструктор явно в программе, то происходит утечка памяти (в Java данная проблема решена сборщиком мусора).
 
'''OP: В Object Pascal''' деструкторы похожи на деструкторы C++. /<small>(Для деструкторов используется ключевое слово destructor ([мое примечание — В. К.])</small> Object Pascal использует стандартный виртуальный деструктор, называемый ''Destroy''. Этот деструктор вызывается стандартным методом ''Free''. Все объекты динамические, поэтому предполагается, что вы вызовете ''Free'' для каждого объекта, созданного вами, если у того нет владельца, отвечающего за его уничтожение. Теоретически вы можете объявить несколько деструкторов, что имеет смысл, посколькуесли вы можете вызывать деструкторы в своем коде (это не делается автоматически).
 
'''Java:''' В Java нет деструкторов. Объекты, на которые нет ссылок, уничтожаются сборщиком мусора, который работает в виде фоновой задачи и делает это автоматически (как описывалось ранее). Прежде чем уничтожать объект, сборщик мусора должен вызвать метод ''finalize()''. Однако нет никакой гарантии, что этот метод вызывается в каждой JVM. По этой причине, если вам нужно освободить ресурсы, вы должны добавить какой-нибудь метод для этого, и убедиться, что он вызывается (эти дополнительные усилия не нужны в других ОО языках).
 
== Инкапсуляция (Private и Public) ==