SlideShare a Scribd company logo
1 of 15
C++ : принципы проектирования, часть 1 Дмитрий Штилерман, Рексофт
Что такое «хорошо» и что такое «плохо» ? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Что на свете самое жесткое, хрупкое и неподъемное? //  My TreeView.cpp #include “MyTreeView.h” #include “MyMainWindow.h” #include “MyListView.h” #include “MyDetailsView.h”  #include “MyFileSystem.h” void CMyTreeView::OnSelChanged()  {   ITEM nCurItem = GetCurSel();   m_pMainWnd->m_pListView   ->SetCurSel(nCurItem);   m_pMainWnd->m_pDetailsView   ->LoadItemInfo(nCurItem);  } Ответ: макароны! // MyFileSystem.cpp #include “MyFileSystem.h” #include “MyTreeView.h” #include “MyMainWindow.h” #include “MyListView.h” #include “MyDetailsView.h” void MyFileSystem::OnFileChange(   const char* pszFileName)  {   ITEM nCurItem = GetFileItemID(   pszFileName);   m_pMainWnd->m_pTreeView   ->SetCurSel(nCurItem);   m_pMainWnd->m_pListView   ->SetCurSel(nCurItem);    m_pMainWnd->m_pDetailsView   ->LoadItemInfo(nCurItem);  }
Зависимости между компонентами системы ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Графы и уровни зависимостей ,[object Object],[object Object],[object Object],[object Object],[object Object]
Примеры графов зависимостей ,[object Object],[object Object],[object Object]
Метрика  зависимости  для компонента ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Метрики зависимости для системы ,[object Object],[object Object],[object Object]
Примеры метрик зависимости для разных систем ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Интерпретация метрик зависимости ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Оптимизация структуры зависимостей ,[object Object],[object Object],[object Object],[object Object]
Общий случай ранжирования для двух компонентов
Escalation  (ранжирование «подъемом») class B  {   A ConvertToA();  }; class A  {   B ConvertToB();  }; class B  {  }; class A  {  }; namespace ABConverter  {   B ConvertAToB(A);   A ConvertBToA(B);  };
Demotion  (ранжирование «спуском») class B  {   enum EB {…};   void g(EA, EB);  }; class A  {   enum EA {…};   void f(EA, EB);  }; class B  {   void g(EA, EB);  }; class A  {   void f(EA, EB);  }; namespace E  {   enum EA {…};   enum EB {…};  };
Другие принципы и способы использования ранжирования ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

More Related Content

What's hot

Стратегический план
Стратегический планСтратегический план
Стратегический план
Darina14
 
презентация стратегич. план.Microsoft Office Power Point
презентация стратегич. план.Microsoft Office Power Pointпрезентация стратегич. план.Microsoft Office Power Point
презентация стратегич. план.Microsoft Office Power Point
Sheffing7
 
Hienadz Drahun Quality & Usability Sef
Hienadz Drahun   Quality & Usability SefHienadz Drahun   Quality & Usability Sef
Hienadz Drahun Quality & Usability Sef
sef2009
 
Научные тренды продления жизни. Обзор исследований в области биологии старения
Научные тренды продления жизни. Обзор исследований в области биологии старенияНаучные тренды продления жизни. Обзор исследований в области биологии старения
Научные тренды продления жизни. Обзор исследований в области биологии старения
Ilya Klabukov
 
методы управления изменениями
методы управления изменениямиметоды управления изменениями
методы управления изменениями
Vasikinbox
 
Урбанистини характеристики на жилищните форми - L10
Урбанистини характеристики на жилищните форми - L10Урбанистини характеристики на жилищните форми - L10
Урбанистини характеристики на жилищните форми - L10
Aleksandar Slaev
 
Vjazanie Dlja Milani
Vjazanie Dlja MilaniVjazanie Dlja Milani
Vjazanie Dlja Milani
titovanatalja
 
вирусный маркетинг
вирусный маркетингвирусный маркетинг
вирусный маркетинг
Kirill Lyubkin
 
Организация навигации в интерфейсах веб-сайтов: 5 принципов
Организация навигации в интерфейсах веб-сайтов: 5 принциповОрганизация навигации в интерфейсах веб-сайтов: 5 принципов
Организация навигации в интерфейсах веб-сайтов: 5 принципов
Denis Beskov
 
Green Office
Green OfficeGreen Office
Green Office
HOSHVA PR
 
Press Kp Tatarstan
Press Kp TatarstanPress Kp Tatarstan
Press Kp Tatarstan
kpkazan
 

What's hot (20)

Стратегический план
Стратегический планСтратегический план
Стратегический план
 
презентация стратегич. план.Microsoft Office Power Point
презентация стратегич. план.Microsoft Office Power Pointпрезентация стратегич. план.Microsoft Office Power Point
презентация стратегич. план.Microsoft Office Power Point
 
Проект закона «О судах аксакалов» (новая редакция)
Проект закона «О судах аксакалов» (новая редакция)Проект закона «О судах аксакалов» (новая редакция)
Проект закона «О судах аксакалов» (новая редакция)
 
Hienadz Drahun Quality & Usability Sef
Hienadz Drahun   Quality & Usability SefHienadz Drahun   Quality & Usability Sef
Hienadz Drahun Quality & Usability Sef
 
Научные тренды продления жизни. Обзор исследований в области биологии старения
Научные тренды продления жизни. Обзор исследований в области биологии старенияНаучные тренды продления жизни. Обзор исследований в области биологии старения
Научные тренды продления жизни. Обзор исследований в области биологии старения
 
Справка - Проект закона «О судах аксакалов» (новая редакция)
Справка - Проект закона «О судах аксакалов» (новая редакция)Справка - Проект закона «О судах аксакалов» (новая редакция)
Справка - Проект закона «О судах аксакалов» (новая редакция)
 
Angina Pectoris
Angina PectorisAngina Pectoris
Angina Pectoris
 
методы управления изменениями
методы управления изменениямиметоды управления изменениями
методы управления изменениями
 
777
777777
777
 
Урбанистини характеристики на жилищните форми - L10
Урбанистини характеристики на жилищните форми - L10Урбанистини характеристики на жилищните форми - L10
Урбанистини характеристики на жилищните форми - L10
 
Internal quality of education
Internal quality of educationInternal quality of education
Internal quality of education
 
Vjazanie Dlja Milani
Vjazanie Dlja MilaniVjazanie Dlja Milani
Vjazanie Dlja Milani
 
стратегия планирования избирательной кампании
стратегия планирования избирательной кампаниистратегия планирования избирательной кампании
стратегия планирования избирательной кампании
 
вирусный маркетинг
вирусный маркетингвирусный маркетинг
вирусный маркетинг
 
Организация навигации в интерфейсах веб-сайтов: 5 принципов
Организация навигации в интерфейсах веб-сайтов: 5 принциповОрганизация навигации в интерфейсах веб-сайтов: 5 принципов
Организация навигации в интерфейсах веб-сайтов: 5 принципов
 
Handmade alpine emergency stretcher
Handmade alpine emergency stretcher Handmade alpine emergency stretcher
Handmade alpine emergency stretcher
 
Sergey Esenin - Teacher presentation
Sergey Esenin - Teacher presentationSergey Esenin - Teacher presentation
Sergey Esenin - Teacher presentation
 
Green Office
Green OfficeGreen Office
Green Office
 
Bu3 Pdf
Bu3 PdfBu3 Pdf
Bu3 Pdf
 
Press Kp Tatarstan
Press Kp TatarstanPress Kp Tatarstan
Press Kp Tatarstan
 

More from Dmitry Stillermann (8)

DiSC Model in Practice
DiSC Model in PracticeDiSC Model in Practice
DiSC Model in Practice
 
Как расти самому, помогая расти другим — практическое применение Management T...
Как расти самому, помогая расти другим — практическое применение Management T...Как расти самому, помогая расти другим — практическое применение Management T...
Как расти самому, помогая расти другим — практическое применение Management T...
 
OO Design with C++: 5. Design Principles, part 2
OO Design with C++: 5. Design Principles, part 2OO Design with C++: 5. Design Principles, part 2
OO Design with C++: 5. Design Principles, part 2
 
OO Design with C++: 3. Inheritance, part 3
OO Design with C++: 3. Inheritance, part 3OO Design with C++: 3. Inheritance, part 3
OO Design with C++: 3. Inheritance, part 3
 
OO Design with C++: 2. Inheritance, part 2
OO Design with C++: 2. Inheritance, part 2OO Design with C++: 2. Inheritance, part 2
OO Design with C++: 2. Inheritance, part 2
 
OO Design with C++: 1. Inheritance, part 1
OO Design with C++: 1. Inheritance, part 1OO Design with C++: 1. Inheritance, part 1
OO Design with C++: 1. Inheritance, part 1
 
OO Design with C++: 6. Templates & Patterns
OO Design with C++: 6. Templates & PatternsOO Design with C++: 6. Templates & Patterns
OO Design with C++: 6. Templates & Patterns
 
OO Design with C++: 0. Intro
OO Design with C++: 0. IntroOO Design with C++: 0. Intro
OO Design with C++: 0. Intro
 

OO Design with C++: 4. Design Principles, part 1

  • 1. C++ : принципы проектирования, часть 1 Дмитрий Штилерман, Рексофт
  • 2.
  • 3. Что на свете самое жесткое, хрупкое и неподъемное? // My TreeView.cpp #include “MyTreeView.h” #include “MyMainWindow.h” #include “MyListView.h” #include “MyDetailsView.h” #include “MyFileSystem.h” void CMyTreeView::OnSelChanged() { ITEM nCurItem = GetCurSel(); m_pMainWnd->m_pListView ->SetCurSel(nCurItem); m_pMainWnd->m_pDetailsView ->LoadItemInfo(nCurItem); } Ответ: макароны! // MyFileSystem.cpp #include “MyFileSystem.h” #include “MyTreeView.h” #include “MyMainWindow.h” #include “MyListView.h” #include “MyDetailsView.h” void MyFileSystem::OnFileChange( const char* pszFileName) { ITEM nCurItem = GetFileItemID( pszFileName); m_pMainWnd->m_pTreeView ->SetCurSel(nCurItem); m_pMainWnd->m_pListView ->SetCurSel(nCurItem); m_pMainWnd->m_pDetailsView ->LoadItemInfo(nCurItem); }
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. Общий случай ранжирования для двух компонентов
  • 13. Escalation (ранжирование «подъемом») class B { A ConvertToA(); }; class A { B ConvertToB(); }; class B { }; class A { }; namespace ABConverter { B ConvertAToB(A); A ConvertBToA(B); };
  • 14. Demotion (ранжирование «спуском») class B { enum EB {…}; void g(EA, EB); }; class A { enum EA {…}; void f(EA, EB); }; class B { void g(EA, EB); }; class A { void f(EA, EB); }; namespace E { enum EA {…}; enum EB {…}; };
  • 15.