04/02/2024

Глава 1. Введение в объекты

Глава 1. Введение в объекты

Развитие абстракции

Все языки программирования построены на абстракции.

Различают тип и качество абстракции. Под словом "Тип" имеется ввиду ответ на вопрос "Что конкретно мы абстрагируем?"

Язык ассемблера - есть небольшая абстракция от компьютера, на базе которого он работает.

"Командные" языки, созданные вслед за ним, такие как Fortran, BASIC и C представляют собой абстракции следующего уровня, но по-прежнему заставляли мыслить в контектсте структуры компьютера, а не решаемой задачи.

Моделирование машины

Нужно устанавливать связь между моделью машины(в "пространстве решения" - место, где реализуется решение, н-р компьютер) и моделью задачи(н-р прикладная область). В результате затрачиваются дополнительные усилия и появляются программы, которые трудно писать и тяжело поддерживать.

Моделирование решаемой задачи

Моделирование окружающего мира

Языки, подобные LISP и APL, имели особый подход к моделированию окружающего мира ("Все задачи решаются списками" или "Алгоритмы решают все")

Проблемы как цепочки решений

PROLOG трактует все проблемы как цепочки решений.

Cистемs ограничений и манипуляциb с графическими конструкциями

Существовали языки для программирования, основанного на системе ограничений и специальные языки, в которых программирование осуществлялось посредством манипуляций с графическими конструкциями(областьприменения оказалась слишком узкой).

Кадый из подходов хорош, но не позволяет выйти из области решаемых задач. Использование их вне их сферы становится затруднительно.

Объектный подход

Объектный подход предоставляет средства для представления задачи в ее пространстве. Имеет общий характер и не накладывает ограничений на тип решаемой проблемы.

Элементы пространства задачи и их представления в пространстве решения называются "объектами".

Программа может адаптироваться к специфике задачи посредством создания новых типов объектов. Т.о. ООП описывает задачу в контексте самой задачи.

Связь с компьютером однако сохранилась т.к. каждый объект похож на компьютер - у него есть состояние и операции, которые он позвояет проводить, что сочетается с реальным миром - "реальность, данная нам в объектах", обладающих характеристиками и поведением.

Характеристики академического подхода к ООП

  • Всё является объектом;
    Объект - это усовершенствованная переменная, он хранит данные, но к нему можно "обращаться с запросами", приказывая выполнить операции над собой. Любой компонент решаемой задачи может быть представлен в виде объекта.

  • Программа - это набор объектов, указывающих друг другу, что делать, посредством сообщений;
    Чтобы обратиться с запросом, вы "посылаете сообщение". Сообщение - это запрос на вызов метода, принадлежащего определенному объекту.

  • Каждый объект имеет собственную "память", состоящую из других объектов;
    Новый объект создается путем встраивания в него уже существующих объектов, скрывая общую сложность за простотой отдельных объектов.

  • У каждого объекта есть тип;
    Каждый объект является экземпляром класса, "класс" - синоним слова "тип". Отличие классов друг от друга - ответ на вопрос "Какие сообщения можно объекту посылать?"

  • Все объекты определенного типа могут получать одинаковые сообщения;
    Объект типа "круг" также является объектом типа "фигура" и справедливо что "круг" также может принимать сообщения для типа "фигура".

Описание объекта (Буч)

Объект обладает состоянием, поведением и индивидуальностью. Объект может иметь внутренние данные(состояние объекта), методы(определяют поведение) и каждый объект можно уникальным образом отличить от другого объекта(н-р уникальным адресом в памяти)

Объект обладает интерфейсом

Понятие типа можно сравнить с понятием Аристотеля о "классе рыб и классе птиц".

Концепция, что все объекты будучи уникальными являются частью класса объектов со сходными характеристиками и поведением, использована в первом объектно-ориентированном языке Simula-67, с введением слова class, которое вводило новый тип в прорамму.