Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 65104
Модуль Forms 64885
Пример работы с... 63348
ТЕХНОЛОГИИ ДОСТ... 61582
Имитационное мо... 57447
Реклама
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

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

Расчет размера дохода на одного человека в Turbo Pascal
Моделирование работы узла коммутации сообщений на GPSS + Пояснительная з...
Моделирование процесса обработки заданий на вычислительном центре на GP...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
ЭТАП 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 17:29:43 · 0 Комментариев · 3898 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
DCMintry
HtmlLerz PRO
Х. М. Дейтел, П. ...
Программирование ...
WordReport
JanButtonsV
Szwavepanel
Swat [Исходник на...
WAP версия сайта
Delphi 2005 Учимс...
AID антивирус
Динамические за...
Игра змейка
База предприятий ...
Формирование отче...
Tenis [Исходник н...
Правила программи...
C++ : библиотека ...
Программирование ...
Программирование ...

Топ загрузок
Приложение Клие... 100466
Delphi 7 Enterp... 86648
Converter AMR<-... 20077
GPSS World Stud... 12670
Borland C++Buil... 11760
Borland Delphi ... 8558
Turbo Pascal fo... 7037
Visual Studio 2... 4998
Калькулятор [Ис... 4760
FreeSMS v1.3.1 3541
Случайные статьи
Параметризация спи...
• Список отзыва се...
12.5. Задачи
Рационализация дом...
Занятие 3. Использ...
Аутентификация при...
DQTABLE (РАЗНОСТНА...
Целочисленный арг...
описаны по адресу www
Время работы прогр...
Знаки операций
Чем отличается руб...
Реализация обобщен...
Конфигурируя бранд...
Блок PRIORITY
Функция VirtualQue...
Большинство модемо...
Игровые автоматы. ...
Коллективное владение
Процедуры проверки...
Ремонт бамперов.
Подтверждение реги...
Технические характ...
Задание таблицы дл...
Операции над матри...
Статистика



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


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