info

View on GitHub

Предавања – Објектно-оријентисано програмирање (И смер) @ Математички факултет

ООП

Овде су постављена предавања из предмета Објектно-оријентисано програмирање на И смеру основних студија.

  1. Уводне напомене презентација

    1.1 Опис сајта курса филм (2019/20)

    1.2. Опис структуре курса (садржај, организација рада, бодовање и сл.) филм (2019/20)

    1.3. Кратак опис Јава програма који неће бити проучавани на курсу филм (2019/20)

     1.3.1. Андроид апликације
    
     1.3.2. Веб апликације
    
     1.3.3. Апликација за аутоматско тестирање веб апликације 
    

    1.4. Кратак опис развојног окружења Visual Studio Code филм (2019/20)

  2. Поступак решавања проблема помоћу рачунара презентација

    2.1. Фазе решавања проблема филм (2019/20)

     2.1.1. Фаза анализе проблема
    
     2.1.2. Фаза креирања алгоритма
    
     2.1.3. Фаза писања програма
    
     2.1.4. Фаза тестирања програма
    
     2.1.5. Фаза експлоатације
    
  3. Објектно оријентисана парадигма и друге парадигме

    3.1. Објектно оријентисано програмирање презентација

     3.1.1. Историјат 
    
     3.1.2. Основни појмови објектно-оријентисаног програмирања
    
         3.1.2.1. Појам објекта
    
         3.1.2.2. Објекти и класе
    
         3.1.2.3. Учаурење
    
         3.1.2.4. Наслеђивање
    
     3.1.3. Напредни концепти објектно-оријентисаног програмирања
    
         3.1.3.1. Једноструко и вишеструко наслеђивање
    
         3.1.3.2. Апстрактне класе
    
         3.1.3.3. Интерфесји
    
     3.1.4. Предности и мане објектно-оријентисаног програмирања
    
     3.1.5. УМЛ дијаграми класа 
    

    3.2. Друге прогрaмске парадигме презентација филм

     3.2.1. Парадигма императивног програмирања
    
     3.2.2. Парадигма структурног програмирања
    
     3.2.3. Парадигма функционалног програмирања
    
  4. Карактеристике програмског језика Јава презентација

    4.1. Историјат и развој програмског језика и окружења Јава филм (2019/20) 1/2 филм (2019/20) 2/2

     4.1.1. Историјат 
    
     4.1.2. Карактеристике испоручених верзија Јаве  
    
     4.1.3. Планиране карактериситке за нове верзије Јаве
    

    4.2. Захтеви постављени за програмски језик и окружење Јава филм (2019/20)

     4.2.1. Једноставаност, објектна оријентисаност, фамилијарност
    
     4.2.2. Робусност и сигурност
    
     4.2.3. Архитектонска неутралност и преносивост
    
     4.2.4. Добре перформасе
    
     4.2.5. Интерпретираност, вишенитност и динамичност
    

    4.3. Типови Јава апликација филм (2019/20) 1/2 филм 2/2

     4.3.1. Десктоп апликације са графичким корисничким интерфејсом
    
     4.3.2. Апликације из команде линије
    
     4.3.3. Апликације за мобилне уређаје
    
     4.3.4. Аплети (веб апликације на клијентској страни)
    
     4.3.5. Сервлети и Јава серверске стране
    
     4.3.6. Веб сервиси
    
     4.3.7. Библиотеке класа
    

    4.4. Процес извршавања Јава програма филм (2019/20)

     4.4.1. Превођење и интерпретација Јава програма
    
     4.4.2. Јава преводилац
    
     4.4.3. Јава виртуелна машина
    

    4.5. Јава алати за развој филм (2019/20)

     4.5.1. Класе, библиотеке класа и пакети
    
     4.5.2. ЈДК и Јава АПИ-ји
    
     4.5.3. Издања Јава окружења (Standard и Enterprise)  
    
     4.5.4. Централни Јава АПИ-ји (Core)
    
     4.5.5. Додатни Јава АПИ-ји (Enterprise, Server, Beans, итд.)  
    

    4.6. Јава као објектно-оријентисани језик

     4.6.1. Примитивни и објектни типови података и њихово представљање
    
     4.6.2. Однос између објекта и класе у Јави
    
     4.6.3. Хијерархија наслеђивања у Јави, класа Object
    
  5. Структура Јава програма презентација

    5.1. Језици за опис конструкција језика Јава филм (2019/20)

     5.1.1. Бекусова нотација
    
     5.1.2. Синтаксни дијаграми
    

    5.2. Азбука језика Јава филм (2019/20)

    5.3. Елементарне конструкције језика Јава филм (2019/20)

     5.3.1. Идентификатори
    
     5.3.2. Литерали
    
     5.3.3. Сепаратори
    
     5.3.4. Оператори
    
     5.3.5. Кључне речи
    
     5.3.6. Коментари
    
     5.3.7. Белине
    

    5.4. Типови података у Јави презентација филм (2019/20)

     5.4.1. Примитивни тип
    
         - Целобројни типови
    
         - Реални типови
    
         - Знаковни тип
    
         - Логички тип
    
     5.4.2. Објектни тип
    
         - Низовни тип
    
         - Кориснички објектни тип
    
         - Енумерисани тип
    

    5.5. Променљиве презентација филм (2019/20)

     5.5.1. Декларација и иницјализација вредности променљиве
    
     5.5.2. Опсег важења променљиве
    

    5.6. Једноставне наредбе филм (2019/20)

     5.6.1. Блок
    
     5.6.2. Наредба декларације и иницијализације
    
     5.6.3. Обележена наредба
    
     5.6.4. Празна наредба
    
     5.6.5. Наредба доделе
    
     5.6.6. Изрази
    
         - Оператори: арност, асоцијативност, приоритет
    

    5.7. Наредбе гранања и наредбе циклуса презентација филм (2019/20)

     5.7.1. Наредбе гранања
    
         - Непотпуна наредба `if`
    
         - Потпуна наредба `if`
    
         - Наредба `switch` и наредбa `break`
    
     5.7.2. Наредбе циклуса
    
         - Наредба `while`
    
         - Наредба `do`-`while`
    
         - Наредба `for` (бројачки циклус)
    
         - Наредба `break` и циклуси
    
         - Наредба `continue` и циклуси
    

    5.8. Улазна тачка програма, static метода main филм (2019/20)

    5.9. Функционална декомпозиција програма филм (2019/20)

     5.9.1. Дефиниција `static` метода
    
         - Параметри
    
         - Тело
    
         - Повратна вредност
    
     5.9.2. Позив `static` метода
    
         - Аргументи
    
         - Супституција параметара при позиву
    
         - Рекурзиja код `static` метода
    
  6. Коришћење популарних класа и објеката испоручених уз ЈДК презентација

    6.1. Приступ систему, класа System филм (2019/20)

     6.1.1. Приказ текста
    
         - Приказ на излазни ток, објекат `System.out`
    
         - Приказ на ток за грешке, објекат `System.err`
    
     6.1.2. Мерење протеклог времена
    
         - Мерење коришћењем метода `System.currentTimeMillis()`
    
         - Мерење коришћењем метода `System.nanoTime()`
    
     6.1.3. Захтев да се покрене сакупљач отпадака, метод `System.gc()`
    
     6.1.4. Приступ елементима Јава окружења
    
         - Метод за читање особине Јава окружења `System.getProperty()`
    
         - Метод за постављање особине Јава окружења `System.setProperty()`
    
         - Метод за брисање особине Јава окружења `System.clearProperty()`
    
         - Метод за читање знака за крај линије `System.lineSeparator()`
    
     6.1.5. Излазак из апликације, метод `System.exit()`
    

    6.2. Рад са објектима, примерцима класе Object филм (2019/20)

     6.2.1. Креирање објекта, оператор `new`
    
     6.2.2. Поређење објеката
    
     6.2.3. Одређивање да ли објекат припада класи
    

    6.3. Рад са нискама, примерцима класе String филм (2019/20)

     6.3.1. Каракеристике ниски, имутабилност  
    
     6.3.2. Креирање ниски
    
     6.3.3. Поређење ниски
    
     6.3.4. Коришћење осталих метода класе `String` 
        
     6.3.5. Надовезивање ниски коришћењем класе `StringBuilder`
    

    6.4. Рад са објектима омотачима података примитивног типа филм (2019/20)

     6.4.1. Карактеристике класа-омотача за примитивне типове
    
     6.4.2. Рад са објектима типа `Integer`, `Long`
    
     6.4.3. Рад са објектима типа `Character`
    
     6.4.4. Рад са објектима типа `Float`, `Double`
    
     6.4.5. Рад са објектима типа `Boolean`
    

    6.5. Рад са скенерима, примерцима класе java.util.Scanner филм (2019/20)

     6.5.1. Скенирање података из ниске  
    
     6.5.2. Скенирање података са стандардног улаза
    

    6.6. Рад са математичким функцијама, класа Math филм (2019/20)

     6.6.1. Приспуп пољима класе `Math`
    
     6.6.2. Коришћење метода класе `Math` за математичка израчунавања
    
     6.6.3. Коришћење метода класе `Math` за рад са псеудо-случајним бројевима
    

    6.7. Рад са датумима и временима филм (2019/20)

     6.7.1. Коришћење метода класе `LocalDate` из пакета `java.time`
    
     6.7.2. Коришћење метода класе `LocalTime` из пакета `java.time`
    
     6.7.3. Коришћење метода класе `LocalDateTime` из пакета `java.time`
    
     6.7.4. Формати датума и времена помоћу `DateTimeFormatter` из пакета `java.time.format`
    
  7. Низови у Јави презентација

    7.1. Декларација и иницијализација низа филм (2019/20)

    7.2. Низовна променљива и индексна променљива филм (2019/20)

    7.3. Бројачки и колекцијски for циклус филм (2019/20)

     7.3.1. Синтакса колекцијског `for` циклуса
    
     7.3.2. Прекид извршавања циклуса
    
     7.3.3. Прескакање дела тела циклуса
    

    7.4. Аргументи команде линије код улазне тачке програма филм (2019/20)

    7.5. Низови низова филм (2019/20)

     7.5.1. Дводимензионални низови
    
     7.5.2. Вишедимензионални низови
    

    7.6. Коришћење класе Arrays филм (2019/20)

     7.6.1. Попуњавање низа вредношћу
    
     7.6.2. Уређење елемената низа
    
     7.6.3. Претраживање уређеног низа
    
     7.6.4. Копирање низа
    

    7.7. Функције са аргументима променљиве дужине филм (2019/20)

     7.7.1. Предности коришћења аргумената променљиве дужине
    
     7.7.2. Препоруке за коришћење агумената променљиве дужине
    
  8. Класе, пакети, поља, методи и објекти у Јави презентација

    8.1. Класе у Јави

     8.1.1. Дефиниција класе у Јави
    
     8.1.2. Креирање објекта - примерка дате класе
    
     8.1.3. Структура објекта
    
     8.1.4. Типови и објекти
    

    8.2. Организација класа по пакетима

     8.2.1. Дефинисње пакета, наредба `package`
    
     8.2.2. Увоз класа из пакета, наредба `import`
    

    8.3. Класе и објекти - поља

     8.3.1. Дефиниција поља
    
     8.3.2. Приступ пољу у примерку дате класе
    
     8.3.3. Класна поља
    
         - Увоз класних поља,  наредба `import static`
    
     8.3.4. Опсег важења за промељиве и поља
    

    8.4. Класе и објекти - методи

     8.4.1. Дефиниција метода
    
         - Параметри метода, потпис метода
    
         - Тело метода
    
         - Повратна вредност метода
    
     8.4.2. Позив метода
    
         - Аргументи метода, константни параметри
    
         - Супституција параметара при позиву метода
    
         - "Сакривање" поља параметрима, референца `this`
    
         - Препоптерћење метода
    
             - Позивање другог препоптерећеног метода, референца `this`
    
     8.4.3. Класни методи
    
         - Увоз класних метода,  наредба `import static`
    
     8.4.4. Класе и низови
    
         - Низови као поља датог објекта
    
         - Низови објеката
    

    8.5. Класе - наслеђивање

     8.5.1. Тип објектне променљиве у времену извршавања
    
     8.5.2. Превазилажење поља и метода у подкласама
    
         - Редефинисање поља у поткласи
    
         - Приступ пољима надкласе у методима, референца `super`
    
         - Позивање методе надкласе, референца `super`
    

    8.6. Иницијализациони блокови и конструктори

     8.6.1. Иницијализациони блок примерка
    
     8.6.2. Класни иницијализациони блок
    
     8.6.3. Конструктор
    
         - Подразумевани конструктор
    
         - Супситиуција параметара при позиву
    
         - "Везивање" поља и аргумената, копирајући конструктор
    
         - Препоптерћење конструктора, референца `this`
    
         - Позив конструктора надкласе, референца `super`
    

    8.7. Модификатори видљивости

     8.7.1. Модификатори за контролу приступа за поља
    
     8.7.2. Модификатори за контролу видљивости метода
    
     8.7.3. Модификатори за контролу видљивости класа
    

    8.8. Модификатор за ограничавње редефинисања и наслеђивања

     8.8.1. Ограничавање могућности редефинисања поља
    
     8.8.2. Ограничавање могућности редефинисања параметара метода
    
     8.8.3. Ограничавање могућности редефинисања локалних променљивих метода
    
     8.8.4. Ограничавање могућности наслеђивања дате класе
    
     8.8.5. Ограничавање могућности редефинисања датог метода
    

    8.9. Структура најпопуларнијих класа ЈДК-а

     8.9.1. Објекти, kласа `Object`  
    
         - Поређење објеката
    
         - Одређивање класе за објекат при извршавању
    
         - Животни циклус објекта, метод финализатор
    
         - Реализација метода класе `Object`
    
     8.9.2. Ниске, класе `String`, `StringBuilder`
    
         - Карактеристике ниски, имутабилност  
    
         - Креирање ниски
    
         - Поређење ниски
    
         - Реализација метода класе `String`
    
         - Реализација метода класе `StringBuilder`
    
     8.9.3. Превазилажење подразумеваног понашања објеката
    
         - Превазилажење приликом одређивања ниске која описује објекат  
    
         - Превазилажење приликом поређења једнакости између објеката  
    
         - Превазилажење приликом финализације објеката
    
     8.9.4. Реализација класа омотача за примитивне типове
    
  9. Напредни рад са класама и објектима презентација

    9.1. Апстрактне класе филм (2019/20)

     9.1.1. Дефинисање апстрактне класе
    
     9.1.2. Наслеђивање између апстрактних и конкретних класа
    

    9.2. Интерфејси филм (2019/20)

     9.2.1. Дефинисање интерфејса
    
     9.2.2. Имплементирање интерфејса од стране класа
    
     9.2.3. Проширивање интерфејса
    
     9.2.4. Параметри типа интерфејса
    

    9.3. Интерфејси у ЈДК-у филм (2019/20)

     9.3.1. Уређење у колекцији, интерфејс `Comparable`
    
     9.3.2. Уређење у колекцији, интерфејс `Comparator`
    
     9.3.3. Методи класе `Arrays`
    
     9.3.4. Клонирање објеката, интерфејс `Cloneable`
    

    9.4. Препоруке за објектно оријентисани дизајн филм (2019/20)

     9.4.1. Принципи SOLID
    
         - Принцип једнозначне одговорности
    
         - Принцип отворености и затворености
    
         - Принцип замене Лисков
    
         - Принцип раздвајања интерфејса
    
         - Принцип инверзије зависности
    
     9.4.2. Додатне препоруке за наслеђивање
    
         - Заједничке операције и поља сместити у надкласе
    
         - Избегавати употребу заштићених поља
    
         - Користити наслеђивање за моделирање односа “јесте”
    
         - Не користити наслеђивање сем уколико оно има смисла за све методе класе из које се наслеђује
    
         - Приликом превазилажења метода не мењати очекивано понашање тј. поштовати принцип замене
    
         - Користити полиморфизам, а не информације о типу
    

    9.5. Догађаји филм (2019/20)

     9.5.1. Догађаји и образац дизајна "Посматрач"
    
     9.5.2. Дефинисање сопствених догађаја
    
  10. Угњеждене и унутрашње класе презентација

    10.1. Угњеждене класе

    10.1.1. Нестатичке угњеждене класе
    
    10.1.2. Статичке  угњеждене класе
    

    10.2. Унутрашње класе

    10.3. Локалне унутрашње класе

    10.4. Анонимне класе

  11. Изузеци и тврдње презентација

    11.1. Изузеци у Јави

    11.1.1. Типови изузетака
    
        - Изузеци типа `Error`
    
        - Изузеци `RuntimeException`
    
    11.1.2. Руковање изузецима
    
        - `try` блок
    
        - `catch` блок
    
            - Вишеструки `catch` блок
    
        - `finally` блок
    
    11.1.3. Избацивање изузетака
    
        - Пропагирање изузетака
    
    11.1.4. Препоруке за рад са изузецима
    

    11.2. Тврдње

    11.2.1. Дефинисање тврдњи
    
    11.2.2. Препоруке за рад са тврдњама
    
  12. Енумерисани типови презентација

    12.1. Карактеристике набројивог типа

    12.2. Креирање примерака набројивог типа

    12.3. Коришћење набројивог типа

  13. Генерички типови презентација

    13.1. Појам генеричког типа

    13.2. Предности генеричког типа

    13.2.1. Стек као генерички интерфејс
    

    13.3. Дефинисање генеричког типа

    13.4. Генерички позив типа

    13.5. Генерички метод

    13.6. Ограничења за типове

    13.7. Генерици и виртуелна машина

    13.8. Генериции и наслеђивање

  14. Колекције и речници презентација

    14.1. Интерфејс и имплементација

    14.2. Апстрактне класе као оснoва за колекције

    14.3. Колекције и итератори

    14.3.1. Интерфејс `Collection`
    
    14.3.2. Интерфејс `Iterator`
    
    14.3.3. Интерфејс `Iterable` и колекцијски `for` циклус  
    
    14.3.4. Операције над колекцијом коришћењем итератора
    

    14.4. Интерфејси који проширују колекцију

    14.4.1. Листа, интерфејс `List`
    
    14.4.2. Итератор листе, интерфејс `ListIterator`
    
    14.4.3. Скуп, интерфејс `Set`
    
    14.4.4. Уређење у колекцији
    
    14.4.5. Сортирани скуп, интерфејс `SortedSet`
    
    14.4.6. Ред, интерфејс `Queue`
    
    14.4.7. Ред са два краја, интерфејс `Deque`
    
    14.4.8. Интерфејс `RandomAccess` за означавање директног приступа
    

    14.5. Колекције испоручене у ЈДК-у

    14.5.1. Повезана листа, класа `LinkedList`
    
    14.5.2. Низовна листа, класа `ArrayList`
    
    14.5.3. Хеш-скуп, класа `HashSet`
    
    14.5.4. Дрво-скуп, класа `TreeSet`  
    
    14.5.5. Низовни ред са два краја, класа `ArrayDeque`
    
    14.5.6. Ред са приоритетом, класа `PriorityQueue`
    

    14.6. Класа Collections

    14.7. Каталози, интерфејс Map

    14.8. Класе за каталоге испоручене у ЈДК-у

    14.8.1. Хеш-каталог, класа `HashMap`
    
    14.8.2. Дрво-каталог, класа `TreeMap`
    

    14.9. Генерици и колекције

    14.9.1. Џокер тип
    
    14.9.2. Ограничења над џокер типом
    
    14.9.3. Генеричке методе имплементиране у ЈДК-у
    
    14.9.4. Апстрактне колекцијске класе, креирање нових колекција
    
  15. Улаз и излаз презентација

    15.1. Токови, читачи и писачи

    15.1.1. Улазни токови података
    
    15.1.2. Излазни токови података
    
    15.1.3. Читачи
    
    15.1.4. Писачи
    

    15.2. Уланчавање токова

    15.3. Датотеке и директоријуми

    15.3.1. Креирање `File` објекта
    
    15.3.2. Апсолутне и релативне путање
    
    15.3.3. Испитивање `File` објекта
    

    15.4. Класа Scanner

  16. Рефлексија презентација

    16.1. Рефлексивни програм

    16.2. Испитивање типа у време извршавања

    16.2.1. Приступ објекту који чува информације о типу
    
    16.2.2. Испитивање наслеђивања и имплементације
    
    16.2.3. Испитивање метода
    

    16.3. Класе за рефлексију

    16.3.1. Класа java.lang.Class
    
    16.3.2. Интерфејс java.lang.reflect.Member
    
    16.3.3. Класа java.lang.reflect.Field
    
    16.3.4. Класа java.lang.reflect.Method
    
    16.3.5. Класа java.lang.reflect.Constructor
    
    16.3.6. Класа java.lang.reflect.AccessibleObject
    

    16.4.Коришћење рефлексије

    16.4.1. Одређивање класе објекта током извршавања
    
    16.4.2. Читање вредности поља
    
    16.4.3. Постављање вредности поља
    
    16.4.4. Позив метода 
    
    16.4.5. Динамичко креирање објекта
    
    16.4.6 Рефлексија и низови
    

    16.5. Имплементација рефлексије у Јави

    16.6. Ограничења рефлексије

  17. Забелешкe (анотације) презентација

    17.1. Формат забелешке

    17.2. Типови забелешки дефинисани у ЈДК-у

    17.3. Креирање новог типа забелешке

    17.4. Мета-забелешке

    17.5. Испитивање забелешки помоћу рефлексије

  18. Елементи функционалног програмирања у Јави презентација

    18.1. Ламбда изрази и парадигма функционаног програмирања

    18.2. Синтакса ламбда израза

    18.3. Функционални интерфејси

    18.3.1. Анотација `@Functional`
    
    18.3.2. Подразумевани методи интерфејса
    

    18.4. Функционални интерфејси дефинисани у ЈДК-у

    18.4.1. Интерфејс `Predicate`
    
    18.4.2. Интерфејс `Consumer`
    
    18.4.3. Интерфејс `Supplier`
    
    18.4.4. Интерфејс `Function`, `IntFunction`, `BiFunction`
    
    18.4.5. Интерфејс `BiFunction`
    
    18.4.6. Интерфејси `BinaryOperator`
    

    18.3. Токови

    18.3.1. Креирање токова
    
    18.3.2. Манипулације над токовима - филтрирање
    
    18.3.3. Манипулације над токовима - мапирање
    
    18.3.4. Манипулације над токовима - редукција
    
    18.3.5. Манипулације над токовима - агрегација  
    

ООП


Creative Commons License
Овај садржај је заштићен лиценцом Creative Commons Attribution-NonCommercial 3.0 Unported License.

За програмски код који се односи на садржај овог курса се може сматрати да је заштићен MIT лиценцом.