- •Статья из wiki-учебника Общие замечания
- •[Править] Контроль во время компиляции и во время выполнения
- •[Править] Чисто объектно-ориентированные и гибридные языки
- •[Править] Простая объектная модель и ссылочно-объектная модель
- •[Править] Классы, объекты и ссылки
- •[Править] Мусорная корзина
- •[Править] Определение новых классов
- •[Править] Создание и уничтожение объектов [править] Конструкторы
- •[Править] Деструкторы и финализация
- •[Править] Инкапсуляция (Private и Public)
- •[Править] Файлы, юниты и пакеты
- •[Править] Методы/данные класса и объекта класса
- •[Править] Классы и наследование
- •[Править] Предок всех классов
- •[Править] Доступ к методам базового класса
- •[Править] Совместимость подтипов
- •[Править] Позднее связывание (и полиморфизм)
- •[Править] Абстрактные методы и классы
- •[Править] Множественное наследование и интерфейсы
- •[Править] Другие свойства
- •[Править] rtti
- •[Править] Обработка исключений
- •[Править] Шаблоны (обобщенное программирование)
- •[Править] Другие специфические свойства
- •[Править] Стандарты
- •[Править] Заключение: Языки и программное окружение
- •[Править] История
- •[Править] Основные понятия
- •[Править] Определение ооп и его основные концепции
- •[Править] Сложности определения
- •[Править] Концепции
- •[Править] Особенности реализации
- •[Править] Подходы к проектированию программ в целом
- •[Править] Родственные методологии
- •[Править] Компонентное программирование
- •[Править] Прототипное программирование
- •[Править] Класс-ориентированное программирование
- •[Править] Производительность объектных программ
- •[Править] Критика ооп
- •[Править] Объектно-ориентированные языки
[Править] Контроль во время компиляции и во время выполнения
Языки программирования можно оценить по тому, насколько они строги к типам. Контроль типов включает проверку существования вызываемых методов, видов их параметров, проверку границ массивов и подобное.
C++, Java, Python, и Object Pascal предпочитают более или менее тщательный контроль типов во время компиляции. С++, возможно, наименее точен в этом отношении (на что указывает, к примеру, возможность присвоения double к float), тогда как Java использует проверку типов наиболее широко. Это оттого, что C++ обеспечивает совместимость с Си, который не очень строго проверяет типы во время компиляции. Например, C и C++ считают, что все арифметические типы совместимы (хотя присвоение float целой переменной вызовет предупреждение компилятора). В Object Pascal и Java логическое значение не целое, а символ - еще один отличный и несовместимый тип.
Тот факт, что виртуальная машина Java интерпретирует байтовый код во время выполнения, не означает, что этот язык отказывается от проверки типов во время компиляции. Наоборот, в этом языке проверка наиболее тщательна. Другие ОО языки, такие как Smalltalk и CLOS, наоборот, склонны большинство проверок типов (если не все) осуществлять во время исполнения.
[Править] Чисто объектно-ориентированные и гибридные языки
Различаются чистые и гибридные объектно-ориентированные языки. Чистые — это те, которые позволяют использовать только одну модель программирования — объектно-ориентированную. Вы можете объявлять классы и методы, но не можете завести глобальные переменные и обычные функции и процедуры старого типа.
Среди наших четырех языков, только Java и C# являются чистыми ОО языками (как Eiffel и Smalltalk). На первый взгляд это кажется положительной идеей. Однако она ведет к тому, что вы используете кучу статических методов и статических данных, что не так уж отличается от использования глобальных функций и данных, за исключением более сложного синтаксиса. По моему мнению, чистые ОО языки дают преимущество новичкам в ООП, потому что программист вынужден использовать (и учить) модель ООП. C++ и Object Pascal, наоборот, - типичные примеры гибридных языков, которые позволяют программистам использовать при необходимости традиционный подход C или Pascal.
Smalltalk расширяет эту идею до уровня «обобъекчивания» таких предопределенных типов данных, как целые и символы, а также языковых конструкций (таких как циклы). Это теоретически интересно, но сильно уменьшает эффективность. Java и C# останавливаются много раньше, допуская присутствие простых не ОО типов данных (хотя имеются необязательные классы-обертки и для простых типов).
[Править] Простая объектная модель и ссылочно-объектная модель
Свойство: Третий элемент, по которому различаются языки ООП - их объектная модель. Некоторые традиционные языки ООП позволяют программистам создавать объекты в стеке, в куче (в хипе - heap) или в статической памяти. В этих языках переменная типа класс соответствует объекту в памяти. Так работает C++.
В последнее время появилась тенденция использовать другую модель, часто называемую ссылочно-объектной моделью. В этой модели каждый объект динамически размещается в куче, а переменная типа класс фактически является ссылкой или хэндлом объекта в памяти (технически это нечто вроде указателя). Java и Object Pascal оба используют эту ссылочную модель. В C# используется преимущественно ссылочно-объектная модель, однако имеется возможность создавать т. н. структуры (по сути дела, структура здесь - специальная разновидность класса), объекты которых будут располагаться в стеке и статической памяти. Как мы увидим, вкратце это значит, что вам необходимо не забыть выделить память для объекта.