Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 15
На сайте нет зарегистрированных пользователей

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

База данных электронного документооборота на Delphi + бд Intebase
Моделирование автовокзала + Отчет + Блок схема
Моделирование регулировочного участка цеха на GPSS + Пояснительная записка

ЭТАП 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 Комментариев · 4618 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Run
Профессиональное ...
Исправление проц...
Киллер окон
DelphiX
Пример работы с б...
3D Октаэдр
Cooltray
Midi
Дарахвелидзе П., ...
Работа с базами д...
JanButtonsV
ComboBox97
Фундаментальные а...
Доступа к БД Fire...
Delphi. Учимся на...
C++ Builder: Книг...
Мод "register.php...
ProLIB18
Язык программиров...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97832
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10290
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Полиморфизм
СПОСОБЫ РАСПОЗНАВА...
Безопасность
• Модернизированны...
Типы данных. Целоч...
Слоты Вулкана
Казино Адмирал – о...
Наследование
й - Алфавитный ука...
Иногда хорошая спе...
Игры для взрослых
Метрика
PDF (Acrobat)
ОПИСАНИЕ МОДЕЛЕЙ С...
УНИФИКАЦИЯ СПИСКОВ...
Нахождение последн...
Разрешение фотогра...
Вывод команды show...
Обработка транзакц...
Разработать прикл...
Программа на языке...
Структура книги
13-5)
Классификация по п...
Глава 2. Интерфейсы
Статистика



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


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