PowerPoint Presentation

Слични документи
3.Kontrlne (upravlja~ke) strukture u Javi

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

Slide 1

Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата

PowerPoint Presentation

Tutoring System for Distance Learning of Java Programming Language

Tutoring System for Distance Learning of Java Programming Language

UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o

PowerPoint Presentation

Tutoring System for Distance Learning of Java Programming Language

PowerPoint Presentation

Zadatak 011 Razmotrite sljedeći primjer. package hr.fer.oopj.primjeri.p011; public class Main { } public static void main(string[] args) { obrada(2.71

Microsoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]

PowerPoint Presentation

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

PowerPoint Presentation

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Inženjering informacionih sistema

ZADACI ZA VEŽBU 1. Realizovati konzolnu aplikaciju koja će računati površinu kvadrata, pravougaonika ili trougla. 2. Preko konzole se unosi ocena od 1

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Funkcije predavač: Nadežda Jakšić

Microsoft Word - Java_introduction_NEW_SYLLABUS.doc

Microsoft Word - 11 Pokazivaci

Primenjeno programiranje - vezbe GUI i baze podataka

Tutoring System for Distance Learning of Java Programming Language

Microsoft PowerPoint - 1. Zend_1 - Instalacija frameworka

Apache Maven Bojan Tomić

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

Programski jezik JAVA PREDAVANJE

Računarski praktikum I - Vježbe 09 - this, static

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Microsoft PowerPoint - JavaP9_2019

Projekti šabloni

Slide 1

Podela ra~unarskih sredtava

Microsoft PowerPoint - 6. CMS [Compatibility Mode]

Funkcije predavač: Nadežda Jakšić

Primenjeno programiranje - Vežbe

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Microsoft PowerPoint - JavaP7_2018

PowerPoint Presentation

P11.3 Analiza zivotnog veka, Graf smetnji

Sveucilište u Zagrebu

P1.0 Uvod

Datum: 20

Upitni jezik SQL

12 Stanje

Писање и превођење модула

Uvod u računarstvo 2+2

Рачунарска интелигенција

Strukture predavač: Nadežda Jakšić

Microsoft PowerPoint - 6. Query Builder.pptx

UNIVERZITET UKSHIN HOTI PRIZREN FAKULTET RAČUNARSKIH NAUKA PROGRAM: TIT - BOS NASTAVNI PLAN-PROGRAM SYLLABUS Nivo studija Bachelor Program TIT-Bos Aka

Model podataka

PowerPoint Presentation

Univerzitet u Beogradu Mašinski fakultet Konstrukcija i tehnologija proizvodnje letelica PODEŠAVANJE PROGRAMSKOG PAKETA CATIA V5 Miloš D. Petrašinović

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Microsoft Word - MySQL_3.doc

Softversko inženjerstvo

Microsoft PowerPoint - NAD IR OS pravila 2017.pptx

Microsoft PowerPoint - Strukturni dijagrami, Gantogram - Planiranje [Compatibility Mode]

Програмирај!

1, 2, 3, кодирај! Активности циклуса 4 Пројект «Аркадне игре» - Час 6: Програмирање падања новчића (наставак) Доминантна дисциплина Математикa Резиме

PHP kod

Upute za instaliranje WordPressa 1.KORAK Da biste instalirali Wordpress, najprije morate preuzeti najnoviju verziju programa s web stranice WordPressa

Sveučilište u Zagrebu Fakultet prometnih znanosti Zavod za inteligentne transportne sustave Katedra za primijenjeno računarstvo Vježba: #7 Kolegij: Ba

Logicko projektovanje racunarskih sistema I

QFD METODA – PRIMER

PROMENLJIVE, TIPOVI PROMENLJIVIH

Slide 1

Microsoft Word - CAD sistemi

P1.2 Projektovanje asemblera

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime

Microsoft PowerPoint - PRI2014 KORIGOVANO [Compatibility Mode]

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

01 SUBP

No Slide Title

Дистрибуирани софтверски системи Технички факултет "Михајло Пупин" Зрењанин, Универзитет у Новом Саду Практикум за лабораторијске вежбе #04 [нерецензи

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

Principi softverskog inženjerstva O predmetu

Programski jezik C

PowerPoint Presentation

12.WT-javaScript-Drupal

PowerPoint Presentation

Biz web hosting

Introduction to Programming

Microsoft Word - SYLLABUS -Dinamicki

POSLOVNI INFORMACIONI SISTEMI I RA^UNARSKE

NAPOMENA: Studenti na ispit donose kod urađenog zadatka

Korisničko uputstvo mobilne aplikacije Digitalni Kiosk 1

PowerPoint Presentation

Programiranje 1

Slide 1

** Osnovni meni

Microsoft PowerPoint - 06 Uvod u racunarske mreze.ppt

Школа Ј. Ј. Змај Свилајнац МЕСЕЧНИ ПЛАН РАДА ЗА СЕПТЕМБАР Школска 2018 /2019. Назив предмета: Информатика и рачунарство Разред: 5. Недељни број часова

Транскрипт:

Објектно орјентисано програмирање Владимир Филиповић vladaf@matf.bg.ac.rs Александар Картељ kartelj@matf.bg.ac.rs

Сопствени пакети и унутрашње класе Владимир Филиповић vladaf@matf.bg.ac.rs Александар Картељ kartelj@matf.bg.ac.rs

3/23 Пакети Програмери групишу сличне тј. повезане типове у пакете и на тај начин избегавају конфликте у именима и контролишу приступ. Пакет је група повезаних типова (класа, интерфејса, енумерисаних типова и типова нотације)за коју је обезбеђује заштита при приступу и управљање простором имена.

4/23 Пакети (2) Разлози за паковање класа и интерфејса у пакете су : 1. Лакше одређивање да ли су типови повезани. 2. Лакше се могу пронаћи тражени типови. 3. Нема именских конфликта са другим типовима истог назива, јер пакет креира нови простор имена. 4. Допуштање да типови унутар пакета имају неограничен приступ један другом.

Пакети (3) 5/23 Процес креирања сопствених пакета се може описати у три корака. Први корак је избор имена пакета. Препорука произвoђaчa: коришћење назива Интернет домена са елементима поређаним по обрнутом редоследу. На пример, ако је назив домена: matf.bg.ac.rs, назив пакета би требало да почне са rs.ac.bg.matf. На тај начин се постиже да назив пакета буде јединствен. По конвенцији, називи пакета почињу малим словима.

Пакети (4) 6/23 Други корак је креирање структуре директоријума (фасцикли, фолдера). Ако је назив пакета из једног дела (нема тачака у називу), назив директоријума поклапа се са називом пакета. Ако се назив пакета састоји из више делова (одвојених тачком), тада за сваки део треба формирати поддиректоријум. На пример, за rs.ac.bg.matf, главни директоријум треба да се зове rs, његов поддиректоријум ac, његов поддиректоријум bg и у њему треба да постоји директоријум matf. У сваки од ових директоријума се могу убацити датотеке, односно класе, интерфејси итд.

Пакети (5) 7/23 Трећи корак је додавање package наредбе Ово треба да буде прва наредба Јава програма, дакле, пре прве наредбе import. На пример, ако је назив пакета rs.ac.bg.matf, на почетку сваке датотеке у том пакету мора писати: package rs.ac.bg.matf;

Пакети (6) 8/23 Да би могло да се рукује уграђеним Јава класама, мора се знати где се класе налазе у оквиру система. Место где се класе налазе одређује се преко команде оперативног система CLASSPATH. Овом командом се дефинише путања до директоријума у ком Јава окружење за извршавање тражи класе. Ако CLASSPATH није дефинисан, подразумева се директоријум java\lib у конкретној инсталацији Јаве. Комбиновањем путање дате у CLASSPATH-у и назива пакета, Јава Виртуелна Машина проналази класе са којима се оперише.

Угнеждене класе 9/23 Јава допушта да се дефинише класа унутар неке друге класе. Таква класа се назива угнеждена класа. Постоје два начина креирања угнеждених класа: class OuterClass {... static class StaticNestedClass {...... class InnerClass {... Прва се назива статичка угнеждена класа, а друга само унутрашња класа.

10/23 Угнеждене класе (2) Постоји неколико разлога за коришћење угнеждених класа: 1. То је начин логичког груписања класа које се користе само на једном месту. 2. Тиме се побољшава енкапулација (учаурење). Ако се класа B смести унутар класе А, поља класе А могу бити приватна а класа B и даље може да им приступа. 3. Угнеждене класе доводе до читљивијег кода који се лакше одржава. Угнеждавање малих класa у велику доводи до тога да код неке операције буде смештен близу места коришћења.

Угнеждене класе (3) 11/23

Угнеждене класе (4) 12/23 package ugnjezdeneklase; public class Spoljasnja { private static int sp; private int np; private void nm(){ private static void sm(){ //instanca ugnjezdene staticke klase nije uslovljena postojanjem instance spoljne klase static class StatickaUgnjezdena{ private static int sp; private int np; private void nm(){ //pristup spoljnoj statickoj Spoljasnja.sp=5; //ne mozemo pristupiti nestatickoj promenljivoj iz //staticke klase //Spoljasnja.np = 8; //ne mozemo pristupiti ni nestatickoj metodi //spoljne klase //Spoljasnja.nm(); //ali mozemo statickoj metodi spoljne klase Spoljasnja.sm(); private static void sm(){ //slicno kao i u nestatickoj nm() metodi, //mozemo pristupiti sledecim elementima spoljne klase Spoljasnja.sp=5; Spoljasnja.sm();

Угнеждене класе (5) 13/23 class Unutrasnja{ //unutrasnja klasa ne moze imati staticke promenljive i metode //private static int sp; private int np; private void nm(){ //pristup spoljnim statickim i nestatickim promenljivama Spoljasnja.sp=5; //ovo je np iz objekta Spoljasnje klase Spoljasnja.this.np=7; //a ovo je np iz objekta klase Ugnjezdena np=8; //slicno i za metode Spoljasnja.sm(); //nestaticka metoda spoljne klase Spoljasnja.this.nm(); //nestaticka metoda ove klase (rekurzija!) nm(); //pristup statickim elementima klase StatickaUgnjezdena StatickaUgnjezdena.sp=5; StatickaUgnjezdena.sm(); public static void main(string[] args) { //ne moze ovako //Unutrasnja un=new Unutrasnja(); Spoljasnja sp=new Spoljasnja(); Unutrasnja un=sp.new Unutrasnja(); StatickaUgnjezdena su=new StatickaUgnjezdena();

14/23 Унутрашње класе Унутрашња класа придружује примерку класе која је обухвата, па и она има директан приступ до свих поља и метода објекта који је садржи. Како је унутрашња класа придружена примерку тј. објекту, то она сама не може садржати статички члан. Објекти примерци унутрашње класе постоје само у оквиру примерка спољашње класе.

15/23 Унутрашње класе (2) Када се дефинише унутрашња класа, она је члан спољашње класе на исти начин као и остали чланови (поља и методе). Унутрашња класа може имати модификаторе приступа као и остали чланови. Угњеждена класа би требало да има специфичну повезаност са спољашњом класом. Произвољно угњеждење једне класе у другу нема много смисла. Класа највишег нивоа је класа која садржи угњеждену класу, али сама по себи није угњеждена

Пример унутрашње класе 16/23 Последом наредбом је креиран објекат типа Spoljasnja. public class Spoljasnja { // Unutrasnja public class Unutrasnja { //Detalji unutrasnje klase... // Ostali clanovi Spoljasnje klase Spoljasnja sp = new Spoljasnja();

Пример унутрашње класе (2) 17/23 Последњом наредбом на претходном слајду није креиран објекат класе Unutrasnja. Ако је потребно да се креира примерак унутрашње класе, то се постиже тако што се реферише на име унутрашње класе са именом спољашње класе као квалификатором: // definisanje objekta unutrasnje klase Spoljasnja.Unutrasnja unut = sp.new Unutrasnja(); У горњем примеру је креиран објекат унутрашње класе који је придружен раније креираном објекту sp.

Пример унутрашње класе (3) 18/23 Унутар нестатичких метода класе Spoljasnja, може се користити име класе Unutrasnja без квалификовања. Тако се унутар нестатичког метода класе Spoljasnja може креирати нови примерак класе Unutrasnja са: Unutrasnja unut = new Unutrasnja(); што је еквивалнтно са: this.unutrasnja unut = this.new Unutrasnja();

Локалне унутрашње класе 19/23 Класа се може дефинисати унутар метода, и то је тзв. локална унутрашња класа (енг. local inner class). Примерци тј. објекти локалне унутрашње класе могу се креирати само локално, тј. унутар метода у коме је и дефиниција класе. То је корисно када израчунавање у методу захтева употребу специјализоване класе. Добар пример су ослушкивачи догађаја (енг. event listener). Локална унутрашња класа може реферисати променљиве декларисане у методу у чијој дефиницији се појављује, али само ако су те променљиве финалне.

Локалне унутрашње класе (2) 20/23 public class PrimerLokalneKlase { static String reg= "[^0-9]"; public static void validirajbrojtelefona(string broj) { //mora da bude finalna kako bi se videla unutar lokalne metode final int duzinabroja = 10; //lokalna klasa jer je koristimo samo za potrebe ove metode class BrojTelefona { String formatiranibroj = null; BrojTelefona(String broj) { String trenutnibroj =broj.replaceall(reg, ""); if (trenutnibroj.length() == duzinabroja) formatiranibroj = trenutnibroj; else formatiranibroj = null; public String vratibroj() { return formatiranibroj; BrojTelefona mojbroj = new BrojTelefona(broj); if (mojbroj.vratibroj() == null) System.out.println("Broj nije dobar"); public static void main(string... args) { validirajbrojtelefona("123-456-7890");

21/23 Анонимне класе Анонимне класе омогућују програмеру да пише концизан код. Оне допуштају да се истовремено декларише класа и креира њен примерак, при чему та класа нема име. Другим речима, оне су као локална класа, само што немају име. Анонимне класе се користе када се локална класа користи само једном.

Анонимне класе (2) 22/23 public class Student { private int godinarodjenja; private String ime, prezime; public Student(int godinarodjenja, String ime, String prezime) { this.godinarodjenja = godinarodjenja; this.ime = ime; this.prezime = prezime; public static void main(string[] args) { Student[] nizstudenata = new Student[3]; nizstudenata[0] = new Student(1992, "Ana", "Pesic"); nizstudenata[1] = new Student(1990, "Mirko", "Petrovic"); nizstudenata[2] = new Student(1985, "Drgana", "Djordjevic"); /*Koristimo anonimnu klasu koja nasledjuje Comparator jer nam treba specifican nacin sortiranja niza i to samo jedanput. Neefikasna alternativa bi bila da smo nasledili klasu komparator nasom klasom npr. MojKomparator, potom redefinisali njen compare metod, ali bi to bilo previse koda za jednokratnu upotrebu*/ Arrays.sort(nizStudenata, new Comparator() { @Override public int compare(object o1, Object o2) { Student s1 = (Student) o1; Student s2 = (Student) o2; return s1.godinarodjenja - s2.godinarodjenja; );

23/23 Захвалница Велики део материјала који је укључен у ову презентацију је преузет из презентације коју је раније (у време када је он држао курс ) направио проф. др Душан Тошић. Хвала проф. Тошићу што се сагласио са укључивањем тог материјала у садашњу презентацији, као и на помоћи коју ми је пружио током конципцирања и реализације курса. Надаље, један део материјала је преузет од колегинице Марије Милановић. Хвала Марији Милановић на помоћи у реализацији ове презентације.