Гради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++ (1158635), страница 20
Текст из файла (страница 20)
Диссертация Кэя (Кау) [F 1969] дала направление большой частидальнейших работ по объектно-ориентированному программированию.Шоу (Shaw) [J 1984] дала блестящий обзор механизмов абстракции в языках программирования высокого уровня. Теоретические обоснования абстракции можно найти в работах Лисков иГуттага (Liskov and Guttag) [H 1986], Гуттага (Guttag) [J 1980] и Хилфингера Hilfinger [J 1982].Работа Парнаса (Parnas) [F 1979] по скрытию информации была очень плодотворна. Смысл изначение иерархии обсуждается в работе под редакцией Пати (Pattee) [J 1973].Есть масса литературы по объектно-ориентированному программированию.
Карделли иВегнер (Cardelli and Wegner) [J 1985] и Вегнер (Wegner) Х[J 1987] подготовили замечательныйобзор объектных и объектно-ориентированных языков. Методические статьи Стефика и Боброва(Stefik and Bobrow) [G 1986], Страуструпа (Stroustrup) [G 1988], Hюгарта(Nygaard)[G 1986] иГрогоно (Grogono) [G 1991] полезны для начала изучения всех вопросов объектноориентированного программирования. В книгах Кокса (Сох) [G 1986],Мейера(Меуег)[F1988],Шмукера(Schmucker) [G 1986] и Кима и Лочовского (Kim and Lochovsky) [F 1989] эти жевопросы рассматриваются более подробно.Методы объектно-ориентированного проектирования впервые ввел Буч (Booch) [F 1981,1982, 1986, 1987, 1989].
Методы объектно-ориентированного анализа впервые ввели Шлэер иМеллор (Shiaer and Mellor) [В 1988] и Бэилин (Bailin) [В 1988]. После этого было предложеномного методов объектно-ориентированного анализа и проектирования; среди них наиболеезначительны были, изложенные в работах Румбаха (Rumbaugh) [F 1991], Коада и Йордона (Coadand Yourdon) [В 1991], Константайна (Constantine) [F 1989], Шлэра и Меллора (Shlaer and Mellor)[В 1992], Мартина и Одела (Martin and Odell) [В 1992], Вассермана (Wasserman) [В 1991],Джекобсона (Jacobson) [F 1992], Рубина и Голдберга (Rubin and Goldberg) [В 1992], Эмбли (Embly)[В 1992], Верфс-Брока (Wirfs-Brock) [F 1990], Голдстейна и Адлера (Goldstein and Adler) [С 1992],Хендерсон-Селлерс (Henderson-Sellers) [F 1992], Файерсмита (Firesmith) [F 1992] и Фьюжина(Fusion) [F 1992].Разбор конкретных случаев может быть найден в работах Тэйлора (Taylor) [H 1990, С1992], Берарда (Berard) [H 1993], Лова (Love) [С 1993] и Пинсона с Вейнером (Pinson and Weiner)[С 1990].Замечательная подборка работ по всем аспектам объектно-ориентированной технологииможет быть найдена в трудах Петерсона (Peterson) [G 1987], Шривера и Вегнера (Schriver andWegner) [G 1987] и Хошафяна и Абнуа (Khoshafian and Abnous) [I 1990].
Труды несколькихежегодных конференций по объектно-ориентированной технологии — это еще один богатыйисточник материала. Наиболее интересные форумы — OOPSLA, ЕСООР, TOOLS, Object Word иObjectExpo.Организации, отвечающие за стандарты по объектной технологии: Object ManagementGroup (OMG) и комитет ANSI X3J7.Главный источник сведений по C++ — это книга Эллис и Страуструпа (Ellis and Stroustrup)[G 1990]. Другие полезные ссылки: Страуструп (Stroustrup) [G 1991], Липпман (Lippman) I [G1991] и Коплиен (Coplien) [1992].Глава 3Классы и объектыИ инженер, и художник должны хорошо чувствовать материал, с которым ониработают. В объектно-ориентированной методологии анализа и создания сложныхпрограммных систем основными строительными блоками являются классы и объекты.Выше было дано всего лишь неформальное определение этих двух элементов.
В этойглаве мы рассмотрим природу классов и объектов, взаимоотношения между ними, атакже сообщим несколько полезных правил проектирования хороших абстракций.3.1. Природа объектаЧто является и что не является объектом?Способностью к распознанию объектов физического мира человекобладает с самого раннего возраста. Ярко окрашенный мяч привлекаетвнимание младенца, но, если спрятать мяч, младенец, как правило, непытается его искать: как только предмет покидает поле зрения, он перестаетсуществовать для младенца. Только в возрасте около года у ребенкапоявляется представление о предмете: навык, который незаменим дляраспознавания.
Покажите мяч годовалому ребенку и спрячьте его:скорее всего, ребенок начнет искать спрятанный предмет. Ребеноксвязывает понятие предмета с постоянством и индивидуальностью формынезависимо от действий, выполняемых над этим предметом [1].В предыдущей главе объект был неформально определен какосязаемая реальность, проявляющая четко выделяемое поведение. С точкизрения восприятия человеком объектом может быть:• осязаемый и (или) видимый предмет;• нечто, воспринимаемое мышлением;• нечто, на что направлена мысль или действие.Таким образом, мы расширили неформальное определение объектановой идеей: объект моделирует часть окружающей действительности и такимобразом существует во времени и пространстве. Термин объект впрограммном обеспечении впервые был введен в языке Simula и применялсядля моделирования реальности [2].Объектами реального мира не исчерпываются типы объектов,интересные при проектировании программных систем.
Другие важные типыобъектов вводятся на этапе проектирования, и их взаимодействие друг сдругом служит механизмом отображения поведения более высокого уровня[З]. Это приводит нас к более четкому определению, данному Смитом и Токи:"Объект представляет собой конкретный опознаваемый предмет, единицу илисущность (реальную или абстрактную), имеющую четко определенноефункциональное назначение в данной предметной области" [4]. В еще болееобщем плане объект может быть определен как нечто, имеющее четкоочерченные границы [5].Представим себе завод, на котором создаются композитные материалыдля таких различных изделий как, скажем, велосипедные рамы и крыльясамолетов.
Заводы часто разделяются на цеха: механический, химический,электрический и т. д. Цеха подразделяются на участки, на каждом из которыхустановлено несколько единиц оборудования: штампы, прессы, станки. Напроизводственных линиях можно увидеть множество емкостей с исходнымиматериалами, из которых с помощью химических процессов создаются блокикомпозитных материалов. Затем из них делается конечный продукт - рамы иликрылья. Каждый осязаемый предмет может рассматриваться как объект.Токарный станок имеет четко очерченные границы, которые отделяют его отобрабатываемого на этом станке композитного блока; рама велосипеда в своюочередь имеет четкие границы по отношению к участку с оборудованием.Существуют такие объекты, для которых определены явныеконцептуальные границы, но сами объекты представляют собой неосязаемыесобытия или процессы.
Например, химический процесс на заводе можнотрактовать как объект, так как он имеет четкую концептуальную границу,взаимодействует с другими объектами посредством упорядоченного ираспределенного во времени набора операций и проявляет хорошоопределенное поведение. Рассмотрим систему пространственногопроектирования CAD/CAM. Два тела, например, сфера и куб, имеют какправило нерегулярное пересечение. Хотя эта линия пересечения несуществует отдельно от сферы и куба, она все же является самостоятельнымобъектом с четко определенными концептуальными границами.Объекты могут быть осязаемыми, но иметь размытые физическиеграницы:реки, туман или толпы людей.1 Подобно тому, как взявший в рукимолоток начина-Объект имеет состояние, обладает некоторым хорошо определеннымповедением и уникальной идентичностьюет видеть во всем окружающем только гвозди, проектировщик с объектноориентированным мышлением начинает воспринимать весь мир в видеобъектов.
Разумеется, такой взгляд несколько упрощен, так как существуютпонятия, явно не являющиеся объектами. К их числу относятся атрибуты,такие, как время, красота, цвет, эмоции (например, любовь или гнев). Однако,потенциально все перечисленное - это свойства, присущие объектам.
Можно,например, утверждать, что некоторый человек (объект) любит свою жену(другой объект), или что конкретный кот (еще один объект) - серый.Полезно понимать, что объект - это нечто, имеющее четкоопределенные границы, но этого недостаточно, чтобы отделить один объект от1Это верно только на достаточно высоком уровне абстракции. Для человека, идущегочерез полосу тумана, бессмысленно отличать "мой туман" от "твоего тумана". Однако,рассмотрим карту погоды: полосы тумана в Сан-Франциско и в Лондонепредставляют собой совершенно разные объекты.другого или дать оценку качества абстракции. На основе имеющегося опытаможно дать следующее определение:Объект обладает состоянием, поведением и идентичностью;структура и поведение схожих объектов определяет общий для них класс;термины "экземпляр класса" и "объект" взаимозаменяемы.СостояниеСемантика.
Рассмотрим торговый автомат, продающий напитки.Поведение такого объекта состоит в том, что после опускания в него монеты инажатия кнопки автомат выдает выбранный напиток. Что произойдет, еслисначала будет нажата кнопка выбора напитка, а потом уже опущена монета?Большинство автоматов при этом просто ничего не сделают, так какпользователь нарушил их основные правила.Другими словами, автомат играл роль (ожидание монеты), которуюпользователь игнорировал, нажав сначала кнопку.