Классы и абстрагирование данных.
Раздел 7.
Всюду вокруг нас объекты (люди, животные, растения, автомобили, самолеты, компьютеры и т.д.). Мы обладаем удивительной способностью абстрагирования, которая позволяет нам наблюдать картинки на экране (людей, горы, деревья) именно в виде объектов, а не отдельных цветовых точек.
Мы разделяем все объекты на две категории – одушевленные объекты и неодушевленные. Одушевленные передвигаются и выполняют действия. Неодушевленные – «сидячее окружение». Однако все эти объекты имеют нечто общее.
Все объекты имеют атрибуты, такие как размер, форма, цвет, вес и тому подобное.
Все они проявляют какое-то поведение (мяч катится, ребенок ползает, автомобиль разгоняется и т.д.).
Человек узнает об объектах путем изучения их атрибутов и наблюдения их поведения.
Разные объекты могут иметь много одинаковых атрибутов и представлять похожие черты поведения (дети и взрослые, люди и шимпанзе, автомобили легковые и грузовые и т.д.).
ООП моделирует объекты реального мира с помощью программных аналогов. Это приводит к появлению отношений классов, когда объекты определенного класса (класс средств передвижения) имеют одинаковые характеристики.
Это выдвигает отношения наследования, когда вновь создаваемые классы приобретают наследуемые характеристики существующих классов, а также содержат свои собственные уникальные характеристики. Объекты класса автомобилей с откидным верхом имеют характеристики класса автомобилей, но крыша у них откидывается и закрывается.
ООП дает возможность рассматривать процесс программирования как моделирование реально существующих объектов, их атрибутов и поведения.
ООП моделирует также связи между объектами. Подобно тому, как люди посылают друг другу сообщения, объекты тоже связываются друг с другом посредством сообщений.
ООП инкапсулирует данные (атрибуты) и функции (способы поведения) в пакеты, называемые объектами. Данные и функции объектов тесно взаимосвязаны.
Объекты имеют свойство скрытия информации. Это означает, что хотя объекты могут знать, как связываться друг с другом с помощью интерфейса, они обычно не могут узнать, как реализованы другие объекты – детали реализации спрятаны внутри самих объектов. Например, можно ездить на автомобиле, не зная как работает мотор и т.д.
В С и других процедурно-ориентированных языках программирование стремится быть ориентированным на действия, тогда как в С++ программирование стремится быть ориентированным на объекты. В Сединицей программирования является функция. В С++ единицей программирования является класс, на основе которого в конечном счете создаются объекты.
Программисты на С основное внимание уделяли написанию функций. Группы действий, выполняющие некоторую общую задачу, объединяются в функции, а функции группируются, чтобы сформировать программу. Данные несомненно важны в С, но современная точка зрения состоит в том, что данные существуют в первую очередь для поддержки действий, выполняемых функциями. Глаголы в описании проектируемой системы помогают программисту на С определить множество функций, которые будут совместно работать для реализации системы.
Программисты на С++ основное внимание уделяют созданию своих собственных определяемых пользователем типов, называемых классами.
Классы – это типы, определяемые программистом. Каждый класс содержит данные и набор функций, манипулирующих с этими данными.
Компоненты-данные класса называются данными-элементами.
Компоненты-функции класса называются функциями-элементами.
Подобно тому как сущность встроенного типа, такого, как int, называемой переменной, сущность определяемого пользователем типа (то есть класса) называется объектом.
Центром внимания в С++ является не функция, а объекты.
Имена существительные в описании проектируемой системы помогают программисту на С++ определить множество классов. Эти классы используются для создания объектов, которые будут совместно работать для реализации системы.