Т. Бадд
Введение.
- Введение и общий замысел. Глава 1 дает неформальное определение базовых концепцийобъектно-ориентированного программирования. Глава2 вводит принцип разработки на основе обязанностей. Эти две главы являются фундаментальными, и их следует изучить подробно. В частности, я настоятельно рекомендую выполнить по крайней мере одно упражнение сCRC-карточками из главы2. Техника CRC-карточек, по моему мнению, является одной из лучших для определения функциональности, ответственности и инкапсуляции при базовой разработке проекта.
- Классы, методы и сообщения Главы 3 и4 определяют синтаксис, используемый в языках Smalltalk, C++, Java, Objective-C иObject Pascal для задания классов,
методов и посылки сообщений. Глава3 заостряет внимание на статических свойствах (классах и методах), в то время как глава4 описывает динамические аспекты(создание объектов и пересылку сообщений). Главы5 и6 развивают эти идеи. Здесь же начинаются обучающие примеры— образцы программ, разработанных в объектно-ориентированной манере и иллюстрирующих различные черты объектной техники.
III. Наследование и повторное использование кода Главы 7, 8 и9 вводят концепцию
наследования и объясняют ее применение для обеспечения повторного использования кода. Пример из главы8, написанный на языке Java, иллюстрирует также применение стандартного прикладного программного интерфейса(API —
application program interface). В главе9 противопоставляются наследование и
композиция в качестве альтернативных техник обеспечения повторного использования кода.
- Более подробно о наследовании. В главах с10 по13 концепция наследования анализируется более детально. Введение наследования оказывает влияние на почти все аспекты языка программирования, которое зачастую не сразу очевидно для начинающего. В главе10 обсуждается поиск методов и их связывание с сообщениями. Там же иллюстрируется тот факт, что подклассы и подтипы— это не одно и то же. В главе11 обсуждается семантика переопределения методов и отмечаются две совершенно различные интерпретации этого понятия. В главе12
продолжается тема переопределения и исследуются некоторые следствия наследования применительно к механизмам управления памятью, присваивания и сравнения. Наконец, в главе13 изучается множественное наследование.
- Полиморфизм. В значительной степени мощь объектно-ориентированного программирования проистекает из применения различных форм полиморфизма. В главе14 читатель знакомится с основными механизмами полиморфизма в объектно-ориентированных языках и двумя показательными обучающими примерами. Первый пример в главе15 рассматривает создание библиотек общего назначения. Конкретная библиотека, а именно недавно разработанная стандартная
библиотека шаблонов (STL — Standard Template Library)для языка С++,
обсуждается в главе 16.
- Разработка программного обеспечения. В главе17 обсуждается ряд стандартных тем компьютерной инженерии в контексте объектно-ориентированного программирования. Глава18 знакомит с несколькими относительно новыми концепциями— средой разработки приложений и шаблонами разработки. Оба подхода основаны на использовании наборов классов. Наконец, в главе19 приводится конкретный пример среды разработки.
VII. Продвинутое изучение. Концепция классов при внимательном рассмотрении не столь проста, как нас пытались убедить в главе 3. В главе 20 рассмотрены более глубокие аспекты объектно-ориентированного программирования. Там же обсуждаются делегирование (являющееся примером объектно-ориентированного программирования без классов) и понятие метакласса(на уровне собственно языка программирования). В главе 21 в общих чертах описаны разнообразные техники реализации, применяющиеся при создании объектно-ориентированных языков.
В десятинедельном курсе, который я читаю в университете штата Орегон, приблизительно одну неделю я посвящаю каждому из основных направлений, описанных выше. В то же самое время студенты работают над не слишком большим проектом. Конкретный объектно-ориентированный язык разработки они выбирают сами. Семестр заканчивается представлением дизайна проекта и его реализацией.
Первое издание книги я закончил главой «Дополнительная информация». К сожалению, объектно-ориентированное программирование развивается так быстро, что любая дополнительная информация почти сразу устаревает. Поэтому я не включил во второе издание главу с таким названием. Вместо этого я попытаюсь поддерживать страничку Web с последними сведениями.
Как получить исходные тексты