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