Садржај
Увод
Принципиобјектно-оријентисаног пројектовања
софтвера
Принцип једне одговорности
Принцип отворено-затворено
Лисков принцип замене
Принцип издвајања интерфејса
Принцип инверзије зависности
Принцип додавања зависности
Закључак
2
3.
Увпд
Различити механизмипобољшања софтверских
система
3
Механизми
побољшања
софтверских система
Принципи
објектно-
оријентисаног
пројектовања
софтвера
Стратегије
пројектовања
софтвера
Софтверски
патерни
Општи принципи
пројектовања
софтвера
Принцип једне
одговорности
Принцип
отворено-
затворено
Лисков принцип
замене
Принцип
додавања
зависности
Принцип
инверзије
зависности
Принцип
издвајања
интерфејса
4.
Принципи пбјектнп-пријентисанпг
прпјектпваоа спфтвера
Представљају основне принципе који се користе
приликом објектно-оријентисаног програмирања и
пројектовања класа
Разликују се следећи општи принципи пројектовања
софтвера: принцип једне одговорности, принцип
отворено-затворено, Лисков принцип замене, принцип
издвајања интерфејса, принцип инверзије зависности и
принцип додавања зависности
У литератури су познати под акронимом SOLID који је
настао комбинацијом почетних слова сваког принципа
(енгл. Single responsibility principle, Open-closed
principle, Liskov substitution principle, Interface
segregation principle и Dependency inversion/injection
principle)
4
5.
Принцип једне пдгпвпрнпсти
Принцип једне одговорности усмерен је на
одговорност класе у софтверском систему
Према овом принципу класа треба да има једну
одговорност у посматраном софтверском систему
Уколико постоји више одговорности посматране
класе постоји и више разлога за њену измену
Пример
5
6.
Принцип птвпренп-затвпренп
Принципотворено-затворено усмерен је на
компоненте (нпр. класе, модуле, функције итд.)
софтверског система
У процесу објектно-оријентисаног развоја
софтвера компоненте требају да буду отворене за
проширења али и затворене за модификацију
[Martin96][Vlajic14]
У том смислу се додавање нове функционалности
не врши изменом постојећег програмског кода већ
непосредним додавањем новог програмског кода
(део софтверског система који је већ написан се не
мења)
Пример
6
7.
Лискпв принцип замене
Усмерен је на класе и њихову међусобну сарадњу
Функције које користе показиваче или референце
ка основним класама (тј. надкласама) морају бити у
могућности да користе и објекте изведених класа
(тј. подкласа) [Martin96]
Другим речима, подкласе требају бити замењиве са
њиховим надкласама [Vlajic14]
Применом овог принципа омогућава се
пројектовање компоненти софтверског система
које се могу поново користити у процесу развоја
софтвера [Pressman10]
Пример
7
8.
Принцип инверзије зависнпсти
Принцип инверзије зависности усмерен је на
компоненте софтверског система које могу бити на
различитим нивоима хијерархије
У том смислу компоненте вишег нивоа не треба да
зависе од компоненти нижег нивоа: и компоненте
вишег нивоа и компоненте нижег нивоа требају бити
зависни од апстракције [Martin96]
С друге стране, апстракција не треба да зависи од
детаља већ детаљи требају бити зависни од апстракције
[Martin96]
Другим речима, применом принципа инверзије
зависности избегава се директна зависност између
компоненти већ се та зависност остварује посредно,
путем апстракције
Пример
8
9.
Принцип дпдаваоа зависнпсти
На основу принципа инверзије зависности може се
закључити да се у процесу објектно-оријентисаног
развоја софтвера избегава директна повезаност и
зависност између компоненти на вишем нивоу
хијерархије и компоненти на нижем нивоу хијерархије
Посматрана зависност се остварује посредно, путем
апстракције
Међутим, поставља се питање саме реализације
зависности, тј. начина на који се врши непосредно
повезивање модула на вишем нивоу хијерархије са
модулом на нижем нивоу хијерархије
Према принципу додавања зависности, зависност
између две компоненте објектно-оријентисаног
софтверског система се конкретно успоставља у време
извршавања програма, коришћењем треће компоненте
9
10.
Принцип дпдаваоа зависнпсти
Та трећа компонента је задужена да, коришћењем
одговарајућег механизма, успостави конкретну
зависност између модула на вишем нивоу хијерархије и
конкретног модула на нижем нивоу хијерархије.
Постоје различити механизми за успостављање
зависности између модула
Постоје различити механизми за успостављање
зависности између модула [Vlajic14]
Успостављање зависности путем конструктора (енгл.
Constructor injection)
Успостављање зависности путем методе (енгл. Method
injection) и
Успостављање зависности путем поља (енгл. Field
injection)
Пример
10
11.
Принцип издвајаоа интерфејса
Интерфејсом се даје спецификација функција
посматраног модула
Сакривање детаља о посматраном софтверском систему
[Meyer88]
У процесу развоја софтвера је на тај начин могуће
направити различите имплементације за посматрану
спецификацију (тј. интерфејс)
Према принципу издвајања интерфејса клијенти не
требају бити зависни од интерфејса које не користе
[Martin96]
Другим речима, боље је да у софтверском систему
постоји више специфичних интерфејса који се користе
од стране клијената него један интерфејс опште намене
[Vlajic14]
Пример
11
12.
Закључак
Различити механизмипобољшања софтверских
система
Принципи објектно-оријентисаног пројектовања
софтвера могу се применити приликом објектно-
оријентисаног програмирања и пројектовања
класа
Принцип једне одговорности
Принцип отворено-затворено
Лисков принцип замене
Принцип издвајања интерфејса
Принцип инверзије зависности
Принцип додавања зависности
12
13.
Закључак
Принципи објектно-оријентисаногпројектовања
софтвера
Принципи објектно-оријентисаног пројектовања
софтвера
Принципи објектно-оријентисаног пројектовања
софтвера
13