SlideShare a Scribd company logo
1 of 33
Архітектура
Програмного
Забезпечення
Архітектура визначає:
• Основні компоненти програми.

• Обов’язки кожного компонента.
Приклад архітектури:
Дизайн Класів
Принципи дизайну класів
• Хороші класи – класи, спроектовані за
принципами SOLID:
•
•
•
•
•

Single Responsibility Principle
Open Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency inversion principle
Single Responsibility Principle (SRP)

Принцип Єдиного Обов’язку
Клас має бути створений для виконання
лише однієї задачі.
public class Employee
{
private String name;
public String GetName()
{
return name;
}
public void PrintReport() //це не має входити в обовязки
{
//робітника
}
}
Недоліки коду, показаного вище:
1.
2.
3.
4.

Складність розуміння.
Складність повторного використання.
Складність підтримки коду.
Ненадійність, велика ймовірність зміни класу,
при потребі зміни будь – яких аспектів системи

кому таке треба? 
Зв’язність (Cohesion)
Зв’язність – міра взаємоповязаності всередині
модуля (класу).
Клас з високою зв’язністю має чітко звязані між
собою обовязки, він призначений для виконання
однієї задачі.
public class Employee
{
private String name;

public String GetName()
{
return name;
}
}
//клас Reporter друкує звіт про певного робітника.
//кожен клас має свою зону відповідальності
public class Reporter
{
public void PrintReport(Employee worker)
{
}
}
Переваги SRP
+ Запобігає дублюванню коду.
+ Мінімізує кількість коду, який потрібно змінити в
разі змін потреб до програмного продукту.
+ Полегшує розуміння коду.
Open Closed Principle (OSP)
Принцип Відкритості/Закритості
Клас має бути відкритий для розширення,
але закритий для змін.
Це означає, що нова поведінка в програмі
повинна додаватись шляхом додавання нових
сутностей, а не зміни старих.
public enum MessageType { SMS, EMAIL };
public class Message{
private MessageType type;

public MessageType GetMessageType() {
return type;}
}
public class MessageSender{
private void sendSMS(Message msg){//... send message as SMS}
private void sendEmail(Message msg){//... Send message as Email}
public void Send(Message msg){
if (msg.GetType() == MessageType.SMS)
sendSMS(msg);
else if (msg.GetType() == MessageType.EMAIL)

sendEmail(msg);

}

}
//!!! зверніть увагу на метод "Send" - тут визначення того, який метод
викликати,
//відбувається в залежності від значеня поля msg
Зв’язаність (Coupling)
Зв’язаність (залежність) – це характеристика
класу, яка визначає ступінь взаємодії модуля
(класу) з іншими модулями
public class SMSMessage : IMessage
{
public void Send()
{
//...send SMS Message
}
}
public class EmailMessage : IMessage
{
public void Send()
{
//...send Email Message
}
}
public class MessageSender{
private void SendMessage(IMessage msg)
{
msg.Send();
}
}

//обидва класи (SMSMessage і EmailMessage) реалізують інтерфейс IMessage,
//і тепер самі підкласи вирішують, який саме меод буде викликаний
Liskov Substitution Principle (LSP)
Принцип підстановки Лісков
Об’єкти в ієрархії класів можуть бути
замінені на їх підтипи без порушення
цілісності системи.
Interface segregation principle (ISP)
Принцип розділення інтерфейсу
Клієнти не повинні залежати від методів,
які вони не використовують.
Даний принцип означає, що занадто
великі інтерфейси необхідно розділяти на
менші та специфічні, щоб їх клієнти знали лише
про ті методи, що необхідні для них у роботі
public interface IAnimal
{
void Eat();
void Fly();
void Bark();
}
public class Dog : IAnimal
{
public void Eat()
{ //some realization }

public class Bird : IAnimal
{
public void Eat()
{ //some realization }

public void Fly()
{
throw new NotImplementedException();
}

public void Fly()
{ //some realization }
public void Bark()
{
throw new NotImplementedException();
}

public void Bark()
{ //some realization }
}

}
public interface
IAnimal
{
void Eat();
}

public interface
IFlyable
{
void Fly();
}

public class Bird : IAnimal, IFlyable
{
public void Eat()
{
// some realization
}

public class Dog : IAnimal, IBarkable
{
public void Eat()
{
// some realization
}

public void Fly()
{
// some realization
}
}

public interface
IBarkable
{
void Bark();
}

public void Bark()
{
// some realization
}
}
Dependency Inversion Principle (DIP)
Принцип інверсії залежностей
• Модулі верхнього рівня не повинні залежати від
модулів нижнього рівня. Обидва повинні
залежати від абстракції.
• Абстракції не повинні залежати від деталей
реалізацій. Деталі повинні залежати від
абстракцій.
Шаблони Проектування
ЧИ БУЛА ЦЯ ЗАДАЧА ВИРІШЕНА ДО МЕНЕ?
Патерни проектування - це готові прийоми
вирішення задач проектування програмного
забезпечення, які перевірені часом та практикою.
Інколи ми використовуємо патерни, навіть не
задумуючись про це. 
Література:
1. “Дизайн-патерни – просто як двері“ Андрій Будай
2. “Head First Design Patterns” Freeman E.T., Freeman E. (є російський переклад)
3. “Design Patterns: Elements of Reusable Object-Oriented Software” Erich
Gamma, Richard Helm, Ralph Johnson, John Vlissides. (є російський переклад)
Практика, практика і знову
практика...
Сінглтон (одинак)
Одинак — шаблон проектування, який
- гарантує, що клас матиме тільки
один екземпляр.
- забезпечує глобальну точку доступу до цього
екземпляра.
public class Singleton
{
//статичний закритий обєкт
private static Singleton instance;
//конструктор закритий!
private Singleton()
{
}
//відкладена ініціалізація
public static Singleton getInstance()
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
Адаптер
Адаптує інтерфейс одного класу в інший,
очікуваний клієнтом.
Адаптер забезпечує роботу класів з несумісними
інтерфейсами
Адаптер
public class Fish
{
public void swim() { /*some realization*/ }
}
public class Hatchet
{
public void sink() { /*some realization*/ }
}
public class HatchetToFishAdapter : Fish
{
private Hatchet hatchet;
public void swim()
{
hatchet.sink();
}
}
Дякую за увагу!

More Related Content

What's hot

Net framework і c# module 10
Net framework і c# module 10Net framework і c# module 10
Net framework і c# module 10Andrii Hladkyi
 
Net framework and C# module 17. Serialization
Net framework and  C# module 17. SerializationNet framework and  C# module 17. Serialization
Net framework and C# module 17. SerializationAndrii Hladkyi
 
System programing module 1. Processes
System programing module 1. ProcessesSystem programing module 1. Processes
System programing module 1. ProcessesAndrii Hladkyi
 
Net Framework and c# module 2. OOP
Net Framework and c# module 2. OOPNet Framework and c# module 2. OOP
Net Framework and c# module 2. OOPAndrii Hladkyi
 
iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)Anatoliy Okhotnikov
 
NET Framework and C# Module 6.2. Generics
NET Framework and C# Module 6.2. GenericsNET Framework and C# Module 6.2. Generics
NET Framework and C# Module 6.2. GenericsAndrii Hladkyi
 
Advanced styles
Advanced stylesAdvanced styles
Advanced styleseleksdev
 
Net framework і c# module 17
Net framework і c# module 17Net framework і c# module 17
Net framework і c# module 17Andrii Hladkyi
 
System programing module 2. Threads
System programing module 2. ThreadsSystem programing module 2. Threads
System programing module 2. ThreadsAndrii Hladkyi
 
Net framework і c# module 16
Net framework і c# module 16Net framework і c# module 16
Net framework і c# module 16Andrii Hladkyi
 
Net framework і c# module 8
Net framework і c# module 8Net framework і c# module 8
Net framework і c# module 8Andrii Hladkyi
 
07 Database Access
07 Database Access07 Database Access
07 Database Accesseleksdev
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net eleksdev
 
Net framework і c# module 14
Net framework і c# module 14Net framework і c# module 14
Net framework і c# module 14Andrii Hladkyi
 
Advanced C#. Part 2
Advanced C#. Part 2Advanced C#. Part 2
Advanced C#. Part 2eleksdev
 
G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2eleksdev
 
Net Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, AbstractionsNet Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, AbstractionsAndrii Hladkyi
 
Net framework і c# module 9
Net framework і c# module 9Net framework і c# module 9
Net framework і c# module 9Andrii Hladkyi
 

What's hot (20)

Net framework і c# module 10
Net framework і c# module 10Net framework і c# module 10
Net framework і c# module 10
 
Net framework and C# module 17. Serialization
Net framework and  C# module 17. SerializationNet framework and  C# module 17. Serialization
Net framework and C# module 17. Serialization
 
DAL
DALDAL
DAL
 
System programing module 1. Processes
System programing module 1. ProcessesSystem programing module 1. Processes
System programing module 1. Processes
 
Net Framework and c# module 2. OOP
Net Framework and c# module 2. OOPNet Framework and c# module 2. OOP
Net Framework and c# module 2. OOP
 
iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)
 
NET Framework and C# Module 6.2. Generics
NET Framework and C# Module 6.2. GenericsNET Framework and C# Module 6.2. Generics
NET Framework and C# Module 6.2. Generics
 
Advanced styles
Advanced stylesAdvanced styles
Advanced styles
 
Net framework і c# module 17
Net framework і c# module 17Net framework і c# module 17
Net framework і c# module 17
 
System programing module 2. Threads
System programing module 2. ThreadsSystem programing module 2. Threads
System programing module 2. Threads
 
Net framework і c# module 16
Net framework і c# module 16Net framework і c# module 16
Net framework і c# module 16
 
Net framework і c# module 8
Net framework і c# module 8Net framework і c# module 8
Net framework і c# module 8
 
07 Database Access
07 Database Access07 Database Access
07 Database Access
 
10 asp.net
10 asp.net 10 asp.net
10 asp.net
 
Net framework і c# module 14
Net framework і c# module 14Net framework і c# module 14
Net framework і c# module 14
 
Advanced C#. Part 2
Advanced C#. Part 2Advanced C#. Part 2
Advanced C#. Part 2
 
G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2
 
Net Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, AbstractionsNet Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, Abstractions
 
Xdebug (ukr)
Xdebug (ukr)Xdebug (ukr)
Xdebug (ukr)
 
Net framework і c# module 9
Net framework і c# module 9Net framework і c# module 9
Net framework і c# module 9
 

Viewers also liked

11 web services
11 web services11 web services
11 web serviceseleksdev
 
C++ Basics
C++ BasicsC++ Basics
C++ Basicseleksdev
 
Mvvw patterns
Mvvw patternsMvvw patterns
Mvvw patternseleksdev
 
#4 code quality
#4 code quality#4 code quality
#4 code qualityeleksdev
 
14 Patterns pt2
14 Patterns pt214 Patterns pt2
14 Patterns pt2eleksdev
 
Sql 04n edited
Sql 04n editedSql 04n edited
Sql 04n editedeleksdev
 
SQL: Indexes, Select operator
SQL: Indexes, Select operatorSQL: Indexes, Select operator
SQL: Indexes, Select operatoreleksdev
 
#2 integration + ui tests
#2 integration + ui tests#2 integration + ui tests
#2 integration + ui testseleksdev
 
Code Practices
Code PracticesCode Practices
Code Practiceseleksdev
 
SQL Grouping, Joins
SQL Grouping, JoinsSQL Grouping, Joins
SQL Grouping, Joinseleksdev
 
If unit2 summary
If unit2 summaryIf unit2 summary
If unit2 summaryeleksdev
 
Advanced C++ concepts
Advanced C++ conceptsAdvanced C++ concepts
Advanced C++ conceptseleksdev
 
Unit1 summary
Unit1 summaryUnit1 summary
Unit1 summaryeleksdev
 
Data Structures
Data StructuresData Structures
Data Structureseleksdev
 
Design patterns
Design patternsDesign patterns
Design patternseleksdev
 
NoSQL basics
NoSQL basicsNoSQL basics
NoSQL basicseleksdev
 
09 advanced c#
09 advanced c#09 advanced c#
09 advanced c#eleksdev
 
sql introduction
sql introductionsql introduction
sql introductioneleksdev
 

Viewers also liked (20)

11 web services
11 web services11 web services
11 web services
 
Uml
UmlUml
Uml
 
C++ Basics
C++ BasicsC++ Basics
C++ Basics
 
Mvvw patterns
Mvvw patternsMvvw patterns
Mvvw patterns
 
#4 code quality
#4 code quality#4 code quality
#4 code quality
 
14 Patterns pt2
14 Patterns pt214 Patterns pt2
14 Patterns pt2
 
Sql 04n edited
Sql 04n editedSql 04n edited
Sql 04n edited
 
SQL: Indexes, Select operator
SQL: Indexes, Select operatorSQL: Indexes, Select operator
SQL: Indexes, Select operator
 
#2 integration + ui tests
#2 integration + ui tests#2 integration + ui tests
#2 integration + ui tests
 
Code Practices
Code PracticesCode Practices
Code Practices
 
SQL Grouping, Joins
SQL Grouping, JoinsSQL Grouping, Joins
SQL Grouping, Joins
 
If unit2 summary
If unit2 summaryIf unit2 summary
If unit2 summary
 
Advanced C++ concepts
Advanced C++ conceptsAdvanced C++ concepts
Advanced C++ concepts
 
Unit1 summary
Unit1 summaryUnit1 summary
Unit1 summary
 
Data Structures
Data StructuresData Structures
Data Structures
 
Design patterns
Design patternsDesign patterns
Design patterns
 
NoSQL basics
NoSQL basicsNoSQL basics
NoSQL basics
 
tsql
tsqltsql
tsql
 
09 advanced c#
09 advanced c#09 advanced c#
09 advanced c#
 
sql introduction
sql introductionsql introduction
sql introduction
 

Similar to 12 Architecture

Uml+Patterns2
Uml+Patterns2Uml+Patterns2
Uml+Patterns2apofig
 
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)Exoft LLC
 
програміст (1)
програміст (1)програміст (1)
програміст (1)123467890qq
 
GRASP as an architecture base [URK]
GRASP as an architecture base [URK]GRASP as an architecture base [URK]
GRASP as an architecture base [URK]Oleg Mazhukin
 
"Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an..."Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an...Fwdays
 
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...Igor Bronovskyy
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CMaksym Davydov
 
опорні схеми
опорні схемиопорні схеми
опорні схемиIrina Tabanets
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)Exoft LLC
 
ASP.NET Core лекція 02.pptx
ASP.NET Core лекція 02.pptxASP.NET Core лекція 02.pptx
ASP.NET Core лекція 02.pptxIhor34
 
скретч 3 клас
скретч 3 класскретч 3 клас
скретч 3 класTamara Emec
 
комп’ютерні програми і мови програмування 2
комп’ютерні програми і мови програмування 2комп’ютерні програми і мови програмування 2
комп’ютерні програми і мови програмування 2Захарова Олена
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_netRingonoki
 

Similar to 12 Architecture (20)

Uml+Patterns2
Uml+Patterns2Uml+Patterns2
Uml+Patterns2
 
cpp-2013 #20 Best practices
cpp-2013 #20 Best practicescpp-2013 #20 Best practices
cpp-2013 #20 Best practices
 
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Behavioral patterns by Pavlo Serdyuk (UKR)
 
Design patterns part 1
Design patterns part 1Design patterns part 1
Design patterns part 1
 
програміст (1)
програміст (1)програміст (1)
програміст (1)
 
GRASP as an architecture base [URK]
GRASP as an architecture base [URK]GRASP as an architecture base [URK]
GRASP as an architecture base [URK]
 
"Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an..."Elements of functional programming in C# based on Language-Ext library as an...
"Elements of functional programming in C# based on Language-Ext library as an...
 
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-C
 
опорні схеми
опорні схемиопорні схеми
опорні схеми
 
04
0404
04
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
 
Tdd, ти де?
Tdd, ти де?Tdd, ти де?
Tdd, ти де?
 
ASP.NET Core лекція 02.pptx
ASP.NET Core лекція 02.pptxASP.NET Core лекція 02.pptx
ASP.NET Core лекція 02.pptx
 
Design patterns part 2
Design patterns part 2Design patterns part 2
Design patterns part 2
 
чоповський Open scada_2014
чоповський Open scada_2014чоповський Open scada_2014
чоповський Open scada_2014
 
скретч 3 клас
скретч 3 класскретч 3 клас
скретч 3 клас
 
комп’ютерні програми і мови програмування 2
комп’ютерні програми і мови програмування 2комп’ютерні програми і мови програмування 2
комп’ютерні програми і мови програмування 2
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_net
 
m-9-10.pptx
m-9-10.pptxm-9-10.pptx
m-9-10.pptx
 

More from eleksdev

Lecture android best practices
Lecture   android best practicesLecture   android best practices
Lecture android best practiceseleksdev
 
Communication in android
Communication in androidCommunication in android
Communication in androideleksdev
 
Hello android world
Hello android worldHello android world
Hello android worldeleksdev
 
Android location and sensors API
Android location and sensors APIAndroid location and sensors API
Android location and sensors APIeleksdev
 
Lecture java basics
Lecture   java basicsLecture   java basics
Lecture java basicseleksdev
 
Frontend basics
Frontend basicsFrontend basics
Frontend basicseleksdev
 
Css animation, html5 api
Css animation, html5 apiCss animation, html5 api
Css animation, html5 apieleksdev
 
Improving rpc bkp
Improving rpc bkpImproving rpc bkp
Improving rpc bkpeleksdev
 
G rpc lection1
G rpc lection1G rpc lection1
G rpc lection1eleksdev
 
Windows service
Windows serviceWindows service
Windows serviceeleksdev
 
Web service lecture
Web service lectureWeb service lecture
Web service lectureeleksdev
 
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...eleksdev
 
SDLC. QA Role
SDLC. QA RoleSDLC. QA Role
SDLC. QA Roleeleksdev
 
SDLC. UX Role
SDLC. UX RoleSDLC. UX Role
SDLC. UX Roleeleksdev
 
SDLC. PM Role
SDLC. PM RoleSDLC. PM Role
SDLC. PM Roleeleksdev
 
SDLC. BA Role
SDLC. BA RoleSDLC. BA Role
SDLC. BA Roleeleksdev
 

More from eleksdev (17)

Lecture android best practices
Lecture   android best practicesLecture   android best practices
Lecture android best practices
 
Communication in android
Communication in androidCommunication in android
Communication in android
 
Hello android world
Hello android worldHello android world
Hello android world
 
Android location and sensors API
Android location and sensors APIAndroid location and sensors API
Android location and sensors API
 
Lecture java basics
Lecture   java basicsLecture   java basics
Lecture java basics
 
Frontend basics
Frontend basicsFrontend basics
Frontend basics
 
Css animation, html5 api
Css animation, html5 apiCss animation, html5 api
Css animation, html5 api
 
Improving rpc bkp
Improving rpc bkpImproving rpc bkp
Improving rpc bkp
 
G rpc lection1
G rpc lection1G rpc lection1
G rpc lection1
 
Windows service
Windows serviceWindows service
Windows service
 
Rpc
RpcRpc
Rpc
 
Web service lecture
Web service lectureWeb service lecture
Web service lecture
 
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
 
SDLC. QA Role
SDLC. QA RoleSDLC. QA Role
SDLC. QA Role
 
SDLC. UX Role
SDLC. UX RoleSDLC. UX Role
SDLC. UX Role
 
SDLC. PM Role
SDLC. PM RoleSDLC. PM Role
SDLC. PM Role
 
SDLC. BA Role
SDLC. BA RoleSDLC. BA Role
SDLC. BA Role
 

12 Architecture

  • 2. Архітектура визначає: • Основні компоненти програми. • Обов’язки кожного компонента.
  • 5. Принципи дизайну класів • Хороші класи – класи, спроектовані за принципами SOLID: • • • • • Single Responsibility Principle Open Closed Principle Liskov Substitution Principle Interface Segregation Principle Dependency inversion principle
  • 6. Single Responsibility Principle (SRP) Принцип Єдиного Обов’язку Клас має бути створений для виконання лише однієї задачі.
  • 7. public class Employee { private String name; public String GetName() { return name; } public void PrintReport() //це не має входити в обовязки { //робітника } }
  • 8. Недоліки коду, показаного вище: 1. 2. 3. 4. Складність розуміння. Складність повторного використання. Складність підтримки коду. Ненадійність, велика ймовірність зміни класу, при потребі зміни будь – яких аспектів системи кому таке треба? 
  • 9. Зв’язність (Cohesion) Зв’язність – міра взаємоповязаності всередині модуля (класу). Клас з високою зв’язністю має чітко звязані між собою обовязки, він призначений для виконання однієї задачі.
  • 10. public class Employee { private String name; public String GetName() { return name; } } //клас Reporter друкує звіт про певного робітника. //кожен клас має свою зону відповідальності public class Reporter { public void PrintReport(Employee worker) { } }
  • 11. Переваги SRP + Запобігає дублюванню коду. + Мінімізує кількість коду, який потрібно змінити в разі змін потреб до програмного продукту. + Полегшує розуміння коду.
  • 12. Open Closed Principle (OSP) Принцип Відкритості/Закритості Клас має бути відкритий для розширення, але закритий для змін. Це означає, що нова поведінка в програмі повинна додаватись шляхом додавання нових сутностей, а не зміни старих.
  • 13. public enum MessageType { SMS, EMAIL }; public class Message{ private MessageType type; public MessageType GetMessageType() { return type;} } public class MessageSender{ private void sendSMS(Message msg){//... send message as SMS} private void sendEmail(Message msg){//... Send message as Email} public void Send(Message msg){ if (msg.GetType() == MessageType.SMS) sendSMS(msg); else if (msg.GetType() == MessageType.EMAIL) sendEmail(msg); } } //!!! зверніть увагу на метод "Send" - тут визначення того, який метод викликати, //відбувається в залежності від значеня поля msg
  • 14.
  • 15. Зв’язаність (Coupling) Зв’язаність (залежність) – це характеристика класу, яка визначає ступінь взаємодії модуля (класу) з іншими модулями
  • 16. public class SMSMessage : IMessage { public void Send() { //...send SMS Message } } public class EmailMessage : IMessage { public void Send() { //...send Email Message } } public class MessageSender{ private void SendMessage(IMessage msg) { msg.Send(); } } //обидва класи (SMSMessage і EmailMessage) реалізують інтерфейс IMessage, //і тепер самі підкласи вирішують, який саме меод буде викликаний
  • 17.
  • 18. Liskov Substitution Principle (LSP) Принцип підстановки Лісков Об’єкти в ієрархії класів можуть бути замінені на їх підтипи без порушення цілісності системи.
  • 19. Interface segregation principle (ISP) Принцип розділення інтерфейсу Клієнти не повинні залежати від методів, які вони не використовують. Даний принцип означає, що занадто великі інтерфейси необхідно розділяти на менші та специфічні, щоб їх клієнти знали лише про ті методи, що необхідні для них у роботі
  • 20. public interface IAnimal { void Eat(); void Fly(); void Bark(); } public class Dog : IAnimal { public void Eat() { //some realization } public class Bird : IAnimal { public void Eat() { //some realization } public void Fly() { throw new NotImplementedException(); } public void Fly() { //some realization } public void Bark() { throw new NotImplementedException(); } public void Bark() { //some realization } } }
  • 21. public interface IAnimal { void Eat(); } public interface IFlyable { void Fly(); } public class Bird : IAnimal, IFlyable { public void Eat() { // some realization } public class Dog : IAnimal, IBarkable { public void Eat() { // some realization } public void Fly() { // some realization } } public interface IBarkable { void Bark(); } public void Bark() { // some realization } }
  • 22. Dependency Inversion Principle (DIP) Принцип інверсії залежностей • Модулі верхнього рівня не повинні залежати від модулів нижнього рівня. Обидва повинні залежати від абстракції. • Абстракції не повинні залежати від деталей реалізацій. Деталі повинні залежати від абстракцій.
  • 24. ЧИ БУЛА ЦЯ ЗАДАЧА ВИРІШЕНА ДО МЕНЕ?
  • 25. Патерни проектування - це готові прийоми вирішення задач проектування програмного забезпечення, які перевірені часом та практикою. Інколи ми використовуємо патерни, навіть не задумуючись про це.  Література: 1. “Дизайн-патерни – просто як двері“ Андрій Будай 2. “Head First Design Patterns” Freeman E.T., Freeman E. (є російський переклад) 3. “Design Patterns: Elements of Reusable Object-Oriented Software” Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. (є російський переклад)
  • 26. Практика, практика і знову практика...
  • 28. Одинак — шаблон проектування, який - гарантує, що клас матиме тільки один екземпляр. - забезпечує глобальну точку доступу до цього екземпляра.
  • 29. public class Singleton { //статичний закритий обєкт private static Singleton instance; //конструктор закритий! private Singleton() { } //відкладена ініціалізація public static Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; } }
  • 30. Адаптер Адаптує інтерфейс одного класу в інший, очікуваний клієнтом.
  • 31. Адаптер забезпечує роботу класів з несумісними інтерфейсами
  • 32. Адаптер public class Fish { public void swim() { /*some realization*/ } } public class Hatchet { public void sink() { /*some realization*/ } } public class HatchetToFishAdapter : Fish { private Hatchet hatchet; public void swim() { hatchet.sink(); } }