Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Общие вопросы создания ПО
Перезагрузить страницу Как правильно проектировать программы
Ответ
 
Опции темы Опции просмотра
  (#16 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию 09.04.2004, 17:04

После очередной порции раздумий, я вернулся к прежней архитектуре:
Код:
                        +---------------+
                     +--|  UDataDomain  |--+
                     |  +---------------+  |
                     |          |          |
                    |/        |/        |/          +---------------+
                     |          |          |           | Dialog Form 1 |
+--------+   +---------------+  |  +---------------+   | Dialog Form 2 |   +-------+
| UStore |->-| UStoreWrapper |  |  | UViewWrapper  |-<-| Dialog Form 3 |-<-| UView |
+--------+   +---------------+  |  +---------------+   |     ...       |   +-------+
                     |          |          |           | Dialog Form N |
                    |/        |/        |/          +---------------+
                     |          |          |
                     |      +-------+      |
                     +--->--| UData |--<---+
                            +-------+
                                |
                               |/
                                |
                                +---------->-----------+
                                |                      |
                                |            +----------------------+
                                |            |                      |
                               |/           | FUNCTIONAL SUBSYSTEM |
                                |            |                      |
                                |            +----------------------+
                                |                      |
                                +-----------<----------+
                                |
                               |/
                                |
                         +---------------+
                         |   UOperator   |
                         +---------------+
                                |
                               |/
                                |
                         +---------------+
                         | UOperatorForm |
                         +---------------+
Дело в том, что архитектура описанная в прошлый раз оказывается не удовлетворяла одному принципу КОП (Компонентно ориентированного программирования), а следовательно была легко разрушаемой.

Принципы КОП:
http://www.inr.ac.ru/~info21/info/qtocop.htm
http://www.oberon.ch/resources/component_s...ftware/cop.html

КОП - это дальнейшее развитие ООП. Подобно тому как структурное программирование накладывает ограничения на стиль написания программ (дисциплинирует программиста). ООП, в свою очередь, накладывает ограничения на структурное программирование. Так КОП накладывает ограничения на ООП. То есть не всякое ООП является КОП, но всякое КОП является ООП.

Один из принципов КОП запрещает наследование между классами описанными в разных модулях потому, что:
Цитата:
Originally posted by http://www.inr.ac.ru/~info21/info/qtocop.htm
[b]бесконтрольное использование ООП приводит к проблемам с надежностью больших программных комплексов.
(Это т.наз. проблема хрупких базовых типов [fragile base class problem]; проблема может проявиться при попытке изменить реализацию типа-предка, когда может оказаться, что изменить реализацию типа-предка даже при неизменных интерфейсах его методов невозможно, не нарушив корректность функционирования типов-потомков.)
(Вспоним, что структурное программирование тоже возникло как некоторая дисциплина использования структур управления, исключающая бесконтрольные неупорядоченные переходы управления с помощью оператора GOTO.)
Речь идет, конечно, только о запрете межмодульного наследования полноценных классов. Межмодульно-наследоваться можно только от абстрактныех классов (реализовывать интерфейс).

После того как я переписал программу в этом стиле, то она, действительно, стала понятнее и даже короче, а главное ее теперь труднее разрушить внесением изменений.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Завершение резидентной программы из другой программы ANUBIS Assembler 3 07.11.2010 17:07
Как правильно работать с компиляцией программы Degenerator С/С++ 3 15.04.2010 19:59
Как правильно? Андрей92 Сетевые подключения 2 10.03.2010 16:20
Excel и DBGrid как проектировать проект Kosha C++ Builder 5 02.07.2007 21:11
Как сделать правильно запуск программы BD .NET 2 01.09.2006 09:36
Как правильно работать с кодировкой программы sank Delphi 1 28.07.2006 17:54
Как сделать запуск программы из другой программы Alexandr P Вопросы начинающих программистов 1 24.05.2005 15:58
Как правильно прописывать путь для программы Лиза Delphi 2 02.08.2004 10:33
При написании программы исчезает окно самой программы Anonymous Visual C++ 3 09.11.2003 23:38
Как правильно писать программы в XP стиле на WinApi Anonymous WinAPI 1 07.07.2003 05:53
Запуск программы main.exe и принудительно закрытие программы real Delphi 2 10.06.2003 13:15



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов