Главная страница
Навигация по странице:

  • ПРИЛОЖЕНИЕ В ФУНДАМЕНТАЛЬНЫЕ КЛАССЫ

  • БИБЛИОГРАФИЯ [Add94] Addison-Wesley, Reading, MA. NEXTSTEP General Reference: Release 3, Volumes 1 and 2, 1994.[AG90]

  • [App89] Apple Computer, Inc., Cupertino, CA. Macintosh Programmers Workshop Pascal 3.0 Reference, 1989.[App92]

  • [Boo94] Grady Booch. Object-Oriented Analysis and Design with Appli- cations. Benjamin/Cummings, Redwood City, CA, 1994. Second Edition. Библиография 429

  • [Bor94] Borland International, Inc., Scotts Valley, CA. A Technical Com- parison of Borland ObjectWindows 2.0 and Microsoft MFC 2.5, 1994.[BV90]

  • [Cal93] Paul R. Calder. Building User Interfaces with Lightweight Objects. PhD thesis, Stanford University, 1993.[Car89]

  • [Coa92] Peter Coad. Object-oriented patterns. Communications of the ACM, 35(9):152–159, September 1992.[Coo92]

  • [dCLF93] Dennis de Champeaux, Doug Lea, and Penelope Faure. Ob- ject-Oriented System Development. Addison-Wesley, Reading, MA, 1993.[Deu89]

  • [ES90] Margaret A. Ellis and Bjarne Stroustrup. The Annotated C++ Reference Manual. Addison-Wesley, Reading, MA, 1990.[Foo92]

  • [GR83] Adele J. Goldberg and David Robson. Smalltalk-80: The Language and Its Implementation. Addison-Wesley, Reading, MA, 1983.[HHMV92]

  • [HO87] Daniel C. Halbert and Patrick D. O’Brien. Object-oriented devel- opment. IEEE Software, 4(5):71–79, September 1987.[ION94]

  • [JF88] Ralph E. Johnson and Brian Foote. Designing reusable classes. Jour- nal of Object-Oriented Programming, 1(2):22–35, June/July 1988.[JML92]

  • [JZ91] Ralph E. Johnson and Jonathan Zweig. Delegation in C++. Journal of Object-Oriented Programming, 4(11):22–35, November 1991. 432

  • [Knu84] Donald E. Knuth. The TЕX book. Addison-Wesley, Reading, MA, 1984.[Kof93]

  • Э. Гамма, Р. Хелм


    Скачать 6.37 Mb.
    НазваниеЭ. Гамма, Р. Хелм
    АнкорFactorial
    Дата14.03.2022
    Размер6.37 Mb.
    Формат файлаpdf
    Имя файлаPatterny_Obektno-Orientirovannogo_Proektirovania_2020.pdf
    ТипДокументы
    #395452
    страница36 из 38
    1   ...   30   31   32   33   34   35   36   37   38

    aDrawing
    shape[0]
    shape[1]
    aLineShape
    aCircleShape
    Рис. Б.2. Нотация схем объектов
    Б.3. СХЕМА ВЗАИМОДЕЙСТВИЙ
    Порядок исполнения запросов, которые объекты посылают друг другу, по- казан на схеме взаимодействий. Так, на рис. Б.3 представлено, как фигура добавляется к рисунку.

    Б.3. Схема взаимодействий
    421
    aCreationTool
    aDrawing
    aLineShape
    new LineShape
    Add(aLineShape)
    Refresh()
    Draw()
    Рис. Б.3. Нотация схем взаимодействий
    На схеме взаимодействий время отсчитывается сверху вниз. Сплошная вертикальная линия обозначает время жизни объекта. Соглашение о выборе имен объектов такое же, как на схемах объектов: имени класса предшествует префикс «a» (например, aShape
    ). Если объект еще не создан к начальному моменту времени, представленному на схеме, то его вертикальная линия идет пунктиром вплоть до момента создания.
    Вертикальный прямоугольник говорит о том, что объект активен, то есть обрабатывает некоторый запрос. Операция может посылать запросы дру- гим объектам, они изображаются горизонтальной линией, указывающей на объект-получатель.
    Имя запроса показывается над стрелкой. Запрос на создание объекта пред- ставлен пунктирной линией со стрелкой. Запрос объекта-отправителя само- му себе изображается стрелкой, указывающей на сам этот объект.
    На рис. Б.3 видно, что первый запрос, исходящий от aCreationTool
    , пре- следует целью создание объекта aLineShape
    . Затем aLineShape добавляется к объекту aDrawing с помощью операции
    Add
    , после чего aDrawing посылает самому себе запрос на обновление
    Refresh
    . Отметим, что частью операции
    Refresh является отправка объектом aDrawing запроса к aLineShape

    ПРИЛОЖЕНИЕ В
    ФУНДАМЕНТАЛЬНЫЕ КЛАССЫ
    В данном приложении документированы фундаментальные классы, кото- рые применялись нами в примерах кода на C++ в описаниях различных паттернов проектирования. Мы специально стремились сделать эти классы простыми и минимальными. Будут описаны следующие классы:
    „
    „
    List
    — упорядоченный список объектов;
    „
    „
    Iterator
    — интерфейс для последовательного доступа к объектам в агрегате;
    „
    „
    ListIterator
    — итератор для обхода списка;
    „
    „
    Point
    точка с двумя координатами;
    „
    „
    Rect
    — прямоугольник, стороны которого параллельны осям координат.
    Некоторые появившиеся сравнительно недавно стандартные типы C++, возможно, реализованы еще не во всех компиляторах. В частности, если ваш компилятор не поддерживает тип bool
    , его можно определить само- стоятельно:
    typedef int bool;
    const int true = 1;
    const int false = 0;
    В.1. LIST
    Шаблон класса
    List представляет собой базовый контейнер для хранения упорядоченного списка объектов. В списке хранятся значения элементов, то

    В.1.
    List
    423
    есть он пригоден как для встроенных типов, так и для экземпляров классов.
    Например, запись
    List
    объявляет список целых int. Но в большинстве паттернов в списке хранятся указатели на объекты, скажем,
    List
    Это позволяет использовать класс
    List для хранения разнородных объектов
    (точнее, указателей на них).
    Для удобства в классе
    List есть синонимы для операций со стеком. Это позволяет явно использовать список в роли стека, не определяя дополни- тельного класса:
    template
    class List {
    public:
    List(long size = DEFAULT_LIST_CAPACITY);
    List(List&);

    List();
    List& operator=(const List&);
    long Count() const;
    Item& Get(long index) const;
    Item& First() const;
    Item& Last() const;
    bool Includes(const Item&) const;
    void Append(const Item&);
    void Prepend(const Item&);
    void Remove(const Item&);
    void RemoveLast();
    void RemoveFirst();
    void RemoveAll();
    Item& Top() const;
    void Push(const Item&);
    Item& Pop();
    };
    В следующих разделах операции описываются более подробно.
    Конструктор, деструктор, инициализация и присваивание
    List(long size)
    — инициализирует список. Параметр size определяет начальное число элементов в списке.
    List(List&)
    — замещает определяемый по умолчанию копирующий конструктор для правильной инициализации данных.

    424
    Приложение В. Фундаментальные классы
    List()
    — освобождает внутренние структуры данных списка, но не эле- менты списка. Не предполагается, что у этого класса будут производные, поэтому деструктор не объявлен виртуальным.
    List& operator=(const List&)
    — реализует операцию присваивания.
    Обращения к элементам
    Следующие операции предназначены для обращения к элементам списка.
    long Count() const
    — возвращает число объектов в списке.
    Item& Get(long index) const
    — возвращает объект с заданным индексом.
    Item& First() const
    — возвращает первый объект в списке.
    Item& Last() const
    — возвращает последний объект в списке.
    Добавление void Append(const Item&)
    — добавляет свой аргумент в конец списка.
    void Prepend(const Item&)
    — добавляет свой аргумент в начало списка.
    Удаление void Remove(const Item&)
    — удаляет заданный элемент из списка. Для применения этой операции требуется, чтобы тип элементов поддерживал оператор проверки равенства
    ==
    void RemoveFirst()
    — удаляет первый элемент из списка.
    void RemoveLast()
    — удаляет последний элемент из списка.
    void RemoveAll()
    — удаляет все элементы из списка.
    Интерфейс стека
    Item& Top() const
    — возвращает элемент, находящийся на вершине стека.
    void Push(const Item&)
    — заносит элемент в стек.
    Item& Pop()
    — извлекает элемент с вершины стека.

    В.3.
    ListIterator
    425
    В.2. ITERATOR
    Iterator
    — это абстрактный класс, который определяет интерфейс обхода агрегата:
    template
    class Iterator {
    public:
    virtual void First() = 0;
    virtual void Next() = 0;
    virtual bool IsDone() const = 0;
    virtual Item CurrentItem() const = 0;
    protected:
    Iterator();
    };
    Операции класса:
    virtual void First()
    — позиционирует итератор на первый объект в агре- гате.
    virtual void Next()
    — позиционирует итератор на следующий по порядку объект.
    virtual bool IsDone() const
    — возвращает true
    , если больше не осталось объектов.
    virtual Item CurrentItem() const
    — возвращает объект, находящийся в текущей позиции.
    В.3. LISTITERATOR
    ListIterator реализует интерфейс класса
    Iterator для обхода списка
    List
    Его конструктор получает в аргументе список, который нужно обойти:
    template
    class ListIterator : public Iterator {
    public:
    ListIterator(const List* aList);

    426
    Приложение В. Фундаментальные классы virtual void First();
    virtual void Next();
    virtual bool IsDone() const;
    virtual Item CurrentItem() const;
    };
    В.4. POINT
    Класс
    Point представляет точку на плоскости в декартовых координатах и поддерживает минимальный набор арифметических операций над векто- рами. Координаты точки определяются так:
    typedef float Coord;
    Операции класса
    Point не нуждаются в пояснениях:
    class Point {
    public:
    static const Point Zero;
    Point(Coord x = 0.0, Coord y = 0.0);
    Coord X() const; void X(Coord x);
    Coord Y() const; void Y(Coord y);
    friend Point operator+(const Point&, const Point&);
    friend Point operator-(const Point&, const Point&);
    friend Point operator*(const Point&, const Point&);
    friend Point operator/(const Point&, const Point&);
    Point& operator+=(const Point&);
    Point& operator-=(const Point&);
    Point& operator*=(const Point&);
    Point& operator/=(const Point&);
    Point operator-();
    friend bool operator==(const Point&, const Point&);
    friend bool operator!=(const Point&, const Point&);
    friend ostream& operator<<(ostream&, const Point&);
    friend istream& operator>>(istream&, Point&);
    };
    Статическая переменная
    Zero представляет начало координат
    Point(0, 0)

    В.5.
    Rect
    427
    В.5. RECT
    Класс
    Rect представляет прямоугольник, стороны которого параллельны осям координат. Прямоугольник определяется начальной вершиной и раз- мерами, то есть шириной и высотой. Операции класса
    Rect не нуждаются в пояснениях:
    class Rect {
    public:
    static const Rect Zero;
    Rect(Coord x, Coord y, Coord w, Coord h);
    Rect(const Point& origin, const Point& extent);
    Coord Width() const; void Width(Coord);
    Coord Height() const; void Height(Coord);
    Coord Left() const; void Left(Coord);
    Coord Bottom() const; void Bottom(Coord);
    Point& Origin() const; void Origin(const Point&);
    Point& Extent() const; void Extent(const Point&);
    void MoveTo(const Point&);
    void MoveBy(const Point&);
    bool IsEmpty() const;
    bool Contains(const Point&) const;
    };
    Статическая переменная
    Zero представляет вырожденный прямоугольник:
    Rect(Point(0, 0), Point(0, 0));

    БИБЛИОГРАФИЯ
    [Add94]
    Addison-Wesley, Reading, MA. NEXTSTEP General Reference:
    Release 3, Volumes 1 and 2, 1994.
    [AG90]
    D.B. Anderson and S. Gossain. Hierarchy evolution and the software lifecycle. In TOOLS ’90 Conference Proceedings, pages
    41–50, Paris, June 1990. Prentice Hall.
    [AIS+77]
    Christopher Alexander, Sara Ishikawa, Murray Silverstein, Max
    Jacobson, Ingrid Fiksdahl-King, and Shlomo Angel. A Pattern
    Language. Oxford University Press, New York, 1977.
    [App89]
    Apple Computer, Inc., Cupertino, CA. Macintosh Programmers
    Workshop Pascal 3.0 Reference, 1989.
    [App92]
    Apple Computer, Inc., Cupertino, CA. Dylan. An object-oriented dynamic language, 1992.
    [Arv91]
    James Arvo. Graphics Gems II. Academic Press, Boston, MA, 1991.
    [AS85]
    B. Adelson and E. Soloway. The role of domain experience in software design. IEEE Transactions on Software Engineering,
    11(11):1351–1360, 1985.
    [BE93]
    Andreas Birrer and Thomas Eggenschwiler. Frameworks in the financial engineering domain: An experience report. In European
    Conference on Object-Oriented Programming, pages 21–35, Kai- serslautern, Germany, July 1993. Springer-Verlag.
    [BJ94]
    Kent Beck and Ralph Johnson. Patterns generate architectures.
    In European Conference on Object-Oriented Programming, pages
    139–149, Bologna, Italy, July 1994. Springer-Verlag.
    [Boo94]
    Grady Booch. Object-Oriented Analysis and Design with Appli- cations. Benjamin/Cummings, Redwood City, CA, 1994. Second
    Edition.

    Библиография
    429
    [Bor81]
    A. Borning. The programming language aspects of ThingLab—a constraint-oriented simulation laboratory. ACM Transactions on
    Programming Languages and Systems, 3(4):343–387, October
    1981.
    [Bor94]
    Borland International, Inc., Scotts Valley, CA. A Technical Com- parison of Borland ObjectWindows 2.0 and Microsoft MFC 2.5,
    1994.
    [BV90]
    Grady Booch and Michael Vilot. The design of the C++ Booch components. In Object-Oriented Programming Systems, Languag- es, and Applications Conference Proceedings, pages 1–11, Ottawa,
    Canada, October 1990. ACM Press.
    [Cal93]
    Paul R. Calder. Building User Interfaces with Lightweight Objects.
    PhD thesis, Stanford University, 1993.
    [Car89]
    J. Carolan. Constructing bullet-proof classes. In Proceedings C++ at Work “89. SIGS Publications, 1989.
    [Car92]
    Tom Cargill. C++ Programming Style. Addison-Wesley, Reading,
    MA, 1992.
    [CIRM93]
    Roy H. Campbell, Nayeem Islam, David Raila, and Peter Madeany.
    De signing and implementing Choices: An object-oriented system in C++. Communications of the ACM, 36(9):117–126, September
    1993.
    [CL90]
    Paul R. Calder and Mark A. Linton. Glyphs: Flyweight objects for user interfaces. In ACM User Interface Software Technologies
    Conference, pages 92–101, Snowbird, UT, October 1990.
    [CL92]
    Paul R. Calder and Mark A. Linton. The object-oriented imple- mentation of a document editor. In Object-Oriented Programming
    Systems, Languages, and Applications Conference Proceedings, pages 154–165, Vancouver, British Columbia, Canada, October
    1992. ACM Press.
    [Coa92]
    Peter Coad. Object-oriented patterns. Communications of the
    ACM, 35(9):152–159, September 1992.
    [Coo92]
    William R. Cook. Interfaces and specifications for the Small- talk-80 collection classes. In Object-Oriented Programming
    Systems, Languages, and Applications Conference Proceedings, pages 1–15, Vancouver, British Columbia, Cana da, October 1992.
    ACM Press.

    430
    Библиография
    [Cop92]
    James O. Coplien. Advanced C++ Programming Styles and Idioms.
    Addison-Wesley, Reading, MA, 1992.
    [Cur89]
    Bill Curtis. Cognitive issues in reusing software artifacts. In Ted
    J. Biggerstaff and Alan J. Perlis, editors, Software Reusability,
    Volume II: Applications and Experience, pages 269–287. Addi- son-Wesley, Reading, MA, 1989.
    [dCLF93]
    Dennis de Champeaux, Doug Lea, and Penelope Faure. Ob- ject-Oriented System Development. Addison-Wesley, Reading,
    MA, 1993.
    [Deu89]
    L. Peter Deutsch. Design reuse and frameworks in the Smalltalk-80 system. In Ted J. Biggerstaff and Alan J. Perlis, editors, Software
    Reusability, Volume II: Applications and Experience, pages 57–71.
    Addison-Wesley, Reading, MA, 1989.
    [Ede92]
    D. R. Edelson. Smart pointers: They’re smart, but they’re not pointers. In Proceedings of the 1992 USENIX C++ Conference, pages 1–19, Portland, OR, August 1992. USENIX Association.
    [EG92]
    Thomas Eggenschwiler and Erich Gamma. The ET++SwapsMan- ager: Using object technology in the financial engineering domain.
    In Object-Oriented Programming Systems, Languages, and Ap- plications Conference Proceedings, pages 166–178, Vancouver,
    British Columbia, Canada, October 1992. ACM Press.
    [ES90]
    Margaret A. Ellis and Bjarne Stroustrup. The Annotated C++
    Reference Manual. Addison-Wesley, Reading, MA, 1990.
    [Foo92]
    Brian Foote. A fractal model of the lifecycles of reusable objects.
    OOPSLA ’92 Workshop on Reuse, October 1992. Vancouver,
    British Columbia, Canada.
    [GA89]
    S. Gossain and D.B. Anderson. Designing a class hierarchy for domain representation and reusability. In TOOLS ’89 Conference
    Proceedings, pa ges 201–210, CNIT Paris—La Defense, France,
    November 1989. Prentice Hall.
    [Gam91]
    Erich Gamma. Object-Oriented Software Development based on
    ET++: De sign Patterns, Class Library, Tools (in German). PhD thesis, University of Zurich Institut f
    ür Informatik, 1991.
    [Gam92]
    Erich Gamma. Object-Oriented Software Development based on
    ET++: De sign Patterns, Class Library, Tools (in German). Spring- er-Verlag, Berlin, 1992.

    Библиография
    431
    [Gla90]
    Andrew Glassner. Graphics Gems. Academic Press, Boston, MA,
    1990.
    [GM92]
    M. Graham and E. Mettala. The Domain-Specific Software Archi- tecture Program. In Proceedings of DARPA Software Technology
    Conference, 1992, pages 204–210, April 1992. Also published in
    CrossTalk, The Journal of Defense Software Engineering, pages
    19–21, 32, October 1992.
    [GR83]
    Adele J. Goldberg and David Robson. Smalltalk-80: The Language and Its Implementation. Addison-Wesley, Reading, MA, 1983.
    [HHMV92]
    Richard Helm, Tien Huynh, Kim Marriott, and John Vlissides.
    An object-oriented architecture for constraint-based graphical editing. In Proceedings of the Third Eurographics Workshop on
    Object-Oriented Graphics, pages 1–22, Champ
    éry, Switzerland,
    October 1992. Also available as IBM Research Division Technical
    Report RC 18524 (79392).
    [HO87]
    Daniel C. Halbert and Patrick D. O’Brien. Object-oriented devel- opment. IEEE Software, 4(5):71–79, September 1987.
    [ION94]
    IONA Technologies, Ltd., Dublin, Ireland. Programmer’s Guide for Orbix, Version 1.2, 1994.
    [JCJO92]
    Ivar Jacobson, Magnus Christerson, Patrik Jonsson, and Gunnar
    Overgaard. Object-Oriented Software Engineering—A Use Case
    Driven Approach. Addison-Wesley, Wokingham, England, 1992.
    [JF88]
    Ralph E. Johnson and Brian Foote. Designing reusable classes. Jour- nal of Object-Oriented Programming, 1(2):22–35, June/July 1988.
    [JML92]
    Ralph E. Johnson, Carl McConnell, and J. Michael Lake. The RTL system: A framework for code optimization. In Robert Giegerich and Su san L. Graham, editors, Code Generation—Concepts, Tools,
    Techniques. Proce edings of the International Workshop on Code
    Generation, pages 255–274, Dagstuhl, Germany, 1992. Spring- er-Verlag.
    [Joh92]
    Ralph Johnson. Documenting frameworks using patterns. In
    Object-Ori en ted Programming Systems, Languages, and Appli- cations Conference Proceedings, pages 63–76, Vancouver, British
    Columbia, Canada, October 1992. ACM Press.
    [JZ91]
    Ralph E. Johnson and Jonathan Zweig. Delegation in C++. Journal of Object-Oriented Programming, 4(11):22–35, November 1991.

    432
    Библиография
    [Kir92]
    David Kirk. Graphics Gems III. Harcourt, Brace, Jovanovich,
    Boston, MA, 1992.
    [Knu73]
    Donald E. Knuth. The Art of Computer Programming, Volumes
    1, 2, and 3. Addison-Wesley, Reading, MA, 1973.
    [Knu84]
    Donald E. Knuth. The TЕX book. Addison-Wesley, Reading, MA,
    1984.
    [Kof93]
    Thomas Kofler. Robust iterators in ET++. Structured Program- ming, 14:62–85, March 1993.
    [KP88]
    Glenn E. Krasner and Stephen T. Pope. A cookbook for using the model-view controller user interface paradigm in Smalltalk-80.
    Journal of Object-Oriented Programming, 1(3):26–49, August/
    September 1988.
    [LaL94]
    Wilf LaLonde. Discovering Smalltalk. Benjamin/Cummings, Red- wood City, CA, 1994.
    1   ...   30   31   32   33   34   35   36   37   38


    написать администратору сайта