Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Программа тестирования (тест) - вступительные экзамены (математика, физи...
Моделирование работы аэропорта на GPSS + Пояснительная записка
База данных - словарь терминов на Delphi + Пояснительная записка

ЭТАП 3. ВЫЯСНЕНИЕ ОТНОШЕНИЙ КЛАССОВ


Задача третьего этапа уточнить отношения классов, определить их скрытые и интерфейсные части. Существенный недостаток нашего построения в том, что, фактически, ни какие из определенных классов не находятся в отношении наследования — базовый–производный, а это значит, что мы не получим одного из серьезных преимуществ ООПрограммированияповторного использования кода. Продолжим процесс проектирования в этом направлении.
Приведем два приема, которые позволяют создавать новые абстракции, полезные в ООП. Первый из них состоит в выделении упорядоченных пар классов и постановке к каждой паре вопроса: “А почему ТВторойКласс не является ТПервыйКласс с некоторым дополнением?”. При ответе на этот вопрос необходимо опираться на опыт программирования.
Итак, почему TTalk не является TStringList с некоторым дополнением? Почти очевидно, что является. Доклад, это текст (TStringList) с заглавием, автором и датой “опубликования”. При определении TTalk на базе TStringList поле Text становится ненужным — доклад является производным классом от TStringList, а значит автоматически включает список строк! Кроме исчезновения поля, проще станет обращаться и к методам класса–предка, теперь это методы и нашего класса. Список строк является хорошей основой и для других классов данного проекта.
Второй прием абстрагирования состоит в выделении некоторого подмножества схожих классов и постановке вопроса: ”Что общего между этими понятиями?”. Предварительная проработка позволит нам не “тонуть в болоте теории схожести”, а взять за основу общности наличие однотипных полей и методов. Вот результат выделения общих полей и методов классов TTalk, TAnnouncement и TConf.
ЭТАП 3. ВЫЯСНЕНИЕ ОТНОШЕНИЙ КЛАССОВ
Вопрос выделения общих свойств не так прост. Даже в нашем случае мы сделали промежуточное обобщение. Для конференции автор — это автор аннотации, возможно он же и лидер дискуссии. Другие лидеры дискуссии могут быть указаны прямо в аннотации.
Мы назвали эту общую часть документом. Теперь наши классы могут быть объявлены следующим образом:
ЭТАП 3. ВЫЯСНЕНИЕ ОТНОШЕНИЙ КЛАССОВ
Разве это не здорово? Мы стали понимать свою задачу с точки зрения работы с новым понятием — документом. Выяснилось, что имеется всего три типа документов, и они очень мало отличаются друг от друга.
Среди недостатков нового проекта следует отметить поле FileName в документах разного типа. Характерной чертой этих документов является то, что их содержание определяется целым файлом, в то время как содержание TTalk определяется частью файла. Устраним этот недостаток, введя новый тип:
TTalk
Новое понятие полностью исчерпывает особенности TAnnouncement, а описание TConf снова упрощается. На этом первая попытка выяснения отношений классов успешно завершена.
Обратимся теперь к вопросу скрытия полей и выяснению типов методов наших классов. Хотя многие распространенные языки программирования позволяют не скрывать (не инкапсулировать) данные объектов, в Delphi Object Pascal для этого практически нет оснований. Все поля данных должны быть сделаны свойствами. Некоторые свойства могут быть доступны только для чтения, другие для модификации, а третьи и для чтения и для модификации.
К свойствам доступным только для чтения очевидно относится свойство Stored. Устанавливать признак должны методы класса, а вне класса достаточно лишь знать записан документ или нет. К свойствам доступным только для модификации можно отнести Offset. Действительно, зачем знать эту величину вне объекта? К свойствам доступным для записи и чтения относятся Caption, Date, Author, FileName.
Теперь остановимся на методах. Очевидно методы работы со свойствами Caption, Date, Author, FileName одинаковы для всех классов и их можно сделать статическими. А вот LoadHdr, LoadBody и Store будут существенно различаться. Поскольку мы будем работать со списками, в которых хранятся указатели на объекты разных типов, следует сделать эти методы виртуальными. По этой же причине виртуальными должны быть и деструкторы классов.
Метод Store для абстрактного класса TDoc лучше сделать protectedвидимым для потомков, но не видимым для пользователей. Приведем результат проектирования.
ЭТАП 3. ВЫЯСНЕНИЕ ОТНОШЕНИЙ КЛАССОВ
Обратите внимание, как свойство Stored перенесено из protected в public, мы опустили все его спецификации.

Описания несколько усложнились. Это произошло по двум причинам. Во–первых мы защитили наши объекты от нежелательного вмешательства, скрыв данные и показав доступные свойства. Вторая причина в том, что нам пришлось указать явно перекрытие виртуальных методов. В действительности выгоды кодирования еще впереди.
Опубликовал Kest October 12 2011 13:29:43 · 0 Комментариев · 4629 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Разработка клиент...
Borland C++Builde...
Разработка интерн...
JanReplace
IPAddresseEdit
AdBlaster v2.5 - ...
WordReport
Пример работы с б...
Пример работы с р...
Rotolabel
Применение жадног...
Пример создания W...
Dbgridpack
Х. М. Дейтел, П. ...
Calendar
«Философия» прогр...
Карта сайта
Cooltray
Calendar
Indy in Depth Глу...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97839
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14193
Borland Delphi ... 10293
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
УПРОЩЕНИЕ МОДЕЛЕЙ ...
Как найти резидент...
Установка, настро...
- contoso
Принцип доминирования
Где душевые кабины...
Пространства имен
Работа с Cookies н...
Куда цифровой сигн...
Трехмерный объект ...
Б+деревья
Ищите возможности ...
Ждать последующих ...
ЯЧЕЙКИ В GPSS
Настройка окон раб...
После утверждения ...
8.2. Два квадратич...
Общее представлени...
Панель управления ...
Предварительная по...
Процедура GetFillP...
Vulkanstavkagames....
Что необходимо учи...
Вулкан клуб казино...
Procedure or funct...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?