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

Software development guidelines - SOLID principles

  • 1.
  • 2.
    Садржај  Увод  Принципиобјектно-оријентисаног пројектовања софтвера  Принцип једне одговорности  Принцип отворено-затворено  Лисков принцип замене  Принцип издвајања интерфејса  Принцип инверзије зависности  Принцип додавања зависности  Закључак 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
  • 14.