Садржај
2 Класе и објекти
2.1 Основни појмови о класама и објектима
3 Генеричке класе
4 Наслеђивање и полиморфизам
5 Примери пројеката са решењима
5.1 Различита кретања
5.2 Квиз
5.4 Приказ рада алгоритама сортирања

Наслеђивање и полиморфизам

Као један од најважнијих концепата објектно оријентисаног програмирања, наслеђивање је централна тема и овог курса. Већ у уводној лекцији, говорећи о парадигмама у програмирању, поменули смо да су у оквиру ООП парадигме концепти наслеђивања и са њиме повезаног динамичког полиморфизма одговорили на одређене честе потребе програмера. Сада је време да прецизније опишемо те потребе и начине на које се оне задовољавају.

Прво ћемо да опишемо проблем надовезивања на постојећу функционалност, на који програмери редовно наилазе радећи на већим пројектима. Осврнућемо се и на детаље због којих решења која обично прва падају на памет нису довољно добра. Затим ћемо да видимо како наслеђивање решава тај проблем на задовољство свих заинтересованих страна.

Други тип проблема је сличан, али се до њега долази обрнутим путем. Често се дешава да планирамо неколико сличних класа, код којих се неки методи природно позивају на исти начин, али се различито извршавају. При томе поменуте класе могу да имају и неке методе или да садрже неке податке који би били потпуно исти у свим тим класама. Један циљ који желимо да остваримо је да избегнемо појављивање истог кода на различитим местима, што се, као што смо поменули, удобно решава наслеђивањем. Други циљ је да додатно искористимо сличности објеката таквих класа и поједноставимо њихову употребу. Примера ради, замислимо да треба да обрадимо већи број објеката који су међусобно врло слични, али нису исти. Обрада може да се састоји од позива истоимених метода над тим разнородним, а сличним објектима. У таквом случају, било би посебно удобно да разнородне објекте можемо да држимо све у једној колекцији и да их све користимо на исти начин, не водећи рачуна о разликама између њих. Краће речено, други циљ је да омогућимо (динамички) полиморфизам. Згодан начин за постизање динамичког полиморфизма је употреба апстрактних класа и интерфејса. Највећи број примера и задатака до краја овог курса је у вези са динамичким полиморфизмом и предностима које он доноси.

На крају ћемо се дотаћи и могућности мењања, односно преправљања наслеђеног понашања, што се остварује помоћу виртуелних метода. Типична ситуација је да имамо више сличних класа, где један метод за већину тих класа треба да ради на исти начин, а нпр. за једну на другачији начин. Тада „већински” начин рада можемо да сместимо на једно место и прогласимо за подразумевани, што значи да друге класе могу да га наследе и користе без измене, док класе којима то не одговара могу да га преиначе.

Све поменуте новине су донеле одређене погодности, али и неке проблеме због којих су мање или више критиковане. Примедбе се углавном односе на спорије извршавање и могућност погрешне употребе због недовољног разумевања коришћених механизама, или самог проблема који се решава. Због тога је важно да се добро разумеју предности и мане нових концепата, као и семантика (ефекти, дејство) наредби кроз које се ти концепти уводе, како бисмо у конкретним ситуацијама доносили што боље одлуке у погледу дизајна софтвера.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+