Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Podobne dokumenty
Wykład 4: Klasy i Metody

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wykład 8: klasy cz. 4

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Wykład 2: Podstawy Języka

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Języki i metody programowania Java. Wykład 2 (część 2)

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Rozdział 4 KLASY, OBIEKTY, METODY

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Materiały do zajęć VII

Definicje klas i obiektów. Tomasz Borzyszkowski

Podstawy programowania obiektowego

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

1 Atrybuty i metody klasowe

Zaawansowane programowanie w języku C++ Klasy w C++

Wykład 7: Pakiety i Interfejsy

Wykład 5: Klasy cz. 3

Języki i techniki programowania Ćwiczenia 2

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie obiektowe

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Multimedia JAVA. Historia

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Programowanie w Internecie. Java

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Java Język programowania

TEMAT : KLASY DZIEDZICZENIE

Dziedziczenie jednobazowe, poliformizm

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Wykład 5: Więcej o Klasach i Metodach

Programowanie obiektowe

Definiowanie własnych klas

PARADYGMATY PROGRAMOWANIA Wykład 4

Aplikacje w środowisku Java

Dziedziczenie. dr Jarosław Skaruz

Dokumentacja do API Javy.

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Język C++ Programowanie obiektowe

Platformy Programistyczne Podstawy języka Java

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Programowanie 2. Język C++. Wykład 3.

Podstawy Programowania Obiektowego

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

Enkapsulacja, dziedziczenie, polimorfizm

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Technologie i usługi internetowe cz. 2

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Języki i metody programowania Java Lab2 podejście obiektowe

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Programowanie obiektowe

Programowanie obiektowe

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

PARADYGMATY PROGRAMOWANIA Wykład 2

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Programowanie obiektowe

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Podstawy i języki programowania

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Interfejsy i klasy wewnętrzne

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Wykład 6: Dziedziczenie

Pakiety i interfejsy. Tomasz Borzyszkowski

Dziedziczenie. Tomasz Borzyszkowski

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Przypomnienie o klasach i obiektach

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Do czego służą klasy?

Szablony klas, zastosowanie szablonów w programach

Programowanie obiektowe

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Programowanie w Javie - wykład 3

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Podstawy Języka Java

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Transkrypt:

Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których przechowywane są dane: Stos zmienne automatyczne, referencje do obiektów (ale nie obiekty). Sterta wszystkie obiekty utworzone w trakcie życia programu, Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Obszar poza RAM obiekty przechowywane w postaci strumieni bajtów poza pamięcią RAM.

Opakowywanie (uobiektowianie) typów pierwotnych Zmienne tworzone w oparciu o typy pierwotne, tworzone są jako zmienne automatyczne na stosie: int i = 1; czasem zachodzi potrzeba utworzenia dynamicznej zmiennej przechowującej wartość typu pierwotnego... czasem korzystne jest by wartość typu pierwotnego traktowana była jak obiekt...... wtedy używa się klasy opakowującej Integer i = new Integer(1);

Opakowywanie (uobiektowianie) typów pierwotnych klasy opakowujące Pierworne typy danych oraz odpowiadające im klasy opakowujące : char Character byte Byte short Short int Integer long Long float Float double Double boolean Boolean void Void

Zasięg zmiennych, czas życia obiektów Zasięg zmiennych okreslony jest tak samo jak w C++. Czas życia obiektów jest inny. Zasięg zmiennych automatycznych jest określany nawiasami : { int i = 1 } // koniec zasięgu (zmienna i przestaje istnieć) Obiekty są dostępne poza zasięgiem, w którym aktualne są referencje: { String s = new String( Lancuch ); } // koniec zasięgu zmiennej s // ale obiekt wskazywany przez s nadal istnieje! Obiekty do których nie ma dostępu ze względu na to, że wszystkie referencje wskazujące na ten obiekt znajdują się poza zasięgiem, są usuwane przez garbage collector (w C++ istnieją bezużytecznie do końca działania programu stanowiąc tzw. wyciek pamięci )

Operator przypisania Przypisanie realizowane jest przy pomocy operatora = Podczas przypisywania jednemu obiektowi innego obiektu kopiowana jest referencja. Po zrealizowaniu takiej operacji zmienne wskazują na ten sam obiekt (obszar pamięci). Obiekt nie jest kopiowany! patrz przykład Przypisanie

Operatory porównania operatory == oraz!= działają dla wszystkich typów wartości należy wszakże pamietać, że porównując wartości obiektowe, porównujemy zawsze referencje, nie obiekty operator == zwraca wartość prawda jeśli po obu stronach stoi ten sam obiekt, nie taki sam obiekt porównanie obiektów realizuje się za pomocą metody equals dla własnych obiektów metodę tę trzeba zdefiniować samemu patrz przykłady Porównanie_Integer, Porównanie_Para

Tworzenie klas klasy tworzone są przy użyciu słowa kluczowego class każda klasa składa się z danych składowych (atrybuty) oraz funkcji składowych (metody) dostęp do składowych obiektów odbywa się przy pomocy operatora. (kropka) każda z klas utrzymuje własny obszar pamięci dla swoich atrybutów atrybuty nie zainicjowane otrzymują zawsze wartości domyślne: boolean: false pozostałe typy: 0

Metody metody w języku Java mogą być tworzone jedynie jako części składowe klasy wywołanie metody dla obiektu czasem nazywa się wysyłaniem komunikatu do obiektu (za Smalltalkiem) metody mogą posiadać argumenty oraz zwracać wartości jeżeli argumentami są obiekty do ciała funkcji przekazywane są ich referencje jeżeli argumentami są wartości typów pierwotnych przekazywane są ich kopie słowo kluczowe return oznacza miejsce zakończenia działania metody oraz wskazuje zwracaną wartość

Składowe statyczne słowo kluczowe static atrybuty statyczne przechowywane są w jednym obszarze pamięci wspólnym dla całej klasy (obiektów) metody statyczne wywoływane mogą być bez konieczności tworzenia obiektów klasy class KlasaStatyczna { static int i = 1; static void metodastatyczna() { i++; } } atrybuty statyczne nazywane są czasem atrybutami (polami) klasy, odnoszą się do klasy możliwe są dwa sposoby odwoływanie się składowych statycznych przez obiekt klasy: o.metodastatyczna(...) (o - obiekt klasy KlasaStatyczna) przez nazwę klasy: KlasaStatyczna.metodaStatyczna (w C++ uzywany jest tu oprator zakresu)

Metody statyczne metody statyczne nie operują na obiektach, nie mają dostępu do atrybutów obiektów metody statyczne są wykorzystywane w celu realizowania dostępu do zmiennych statycznych danej klasy jednym z podstawowych zastosowań metody statycznej jest możliwość wywoływania metody main() bez konieczności tworzenia obiektu rozpoczynającego działanie programu

Atrybuty statyczne jeżeli atrybut statyczny jest typu podstawowego i nie zostanie mu nadana wartość początkowa to zyska domyślną wartość początkową właściwą dla jej typu atrybuty statyczne są inicjalizowane podczas pierwszego odwołania do klasy (tworzenia obiektu klasy, odwołania do składowej statycznej) Możliwe jest zbieranie wszystkich inicjalizacji statycznych w bloki rozpoczynające się od słowa kluczowego static. class Przykład { static int i,j; static { i = 1; j = 2; } }

Przeciążanie metod W języku Java dozwolone jest przeciążanie metod (wprowadzanie metod o tych samych nazwach). Metody przeciążone są rozróżnione przez kompilator poprzez ich argumenty.

Parametry metod parametry w języku Java są zawsze przekazywane przez wartość (jak w C!) metoda otrzymuje kopię wszystkich wartości parametrów powyższe dotyczy wszystkich typów pierwotnych oraz referencji w przypadku, w którym parametrem jest referencja do obiektu, możliwe jest realizowanie przez daną metodę operacji na wskazywanym obiekcie: do metody przekazywana jest kopia referencji, która wskazuje na ten sam obiekt co oryginał!

Inicjalizacja obiektu inicjalizacja obiektu realizowana jest przez konstruktor, czyli metodę automatycznie wywoływaną podczas tworzenia obiektu nazwa konstruktora jest taka sama jak nazwa klasy podobnie jak inne metody konstruktory mogą posiadać argumenty jedna klasa może posiadać wiele konstruktorów w tej sytuacji ma miejsce przeładowanie konstruktora konstruktor nie zwraca wartości jeżeli w sposób jawny nie zostanie zdefiniowany żaden konstruktor kompilator automatycznie utworzy konstruktor domyślny (konstruktor bezargumentowy). jeżeli jawnie zdefiniujemy konstruktor, konstruktor domyślny nie jest automatycznie tworzony przez kompilator.

Inicjalizacja atrybutow (niestatycznych) atrybuty mogą być inicjalizowane: w konstruktorze poprzez przypisanie wartości przy deklaracji atrybutu w bloku inicjalizacji blok inicjalizacji wykonywany jest przed wywołaniem konstruktora class Osoba { public Osoba(){... } // Blok inicjalizacji { nazwisko = ;... } private String nazwisko;...

this słowo kluczowe this pozwala na odwołanie się do obiektu, na którego rzecz jest wywoływana this powinno być wykorzystywane w tych przypadkach w których zachodzi potrzeba jawnego odwoływania się do aktualnego obiektu np. w sytuacji zwracania odwołania do aktualnego obiektu w instrukcji return. public class This { This zwieksz() { i++; return this; } void wypisz() { System.out.println("i = " + i); } public static void main(string[] args) { This x = new This(); x.zwieksz().zwieksz().zwieksz().wypisz(); } int i = 0; }

Metoda finalize java nie posiada destruktorów, aby więc zwalniać wykorzystywane zasoby wprowadzona została metoda finalize metoda finalize zostanie wywołana zanim mechanizm garbage collector zniszczy dany obiekt Uwaga: poleganie na metodzie finalize może być bardzo zawodne nie jest możliwe określenie kiedy i czy zostanie wywołany garbage collector a w konsekwencji kiedy i czy zostanie wywołana metoda finalize W celu realizowania operacji kończących działanie danego obiektu zaleca się wprowadzanie metod kończących (zakoncz, dispose) oraz ręczne ich wywoływanie.

Widoczność składowych modyfikatory dostępu do składowych klasy w języku Java możliwe jest korzystanie z modyfikatorów dostępu: public, protected, private. modyfikatory dostępu powinny zostać umieszczone w sposób jawny przed każdą składową klasy (atrybut, metoda) w przypadku braku użycia modyfikatora dostępu przyjmowany jest tzw. przyjazny dostęp do składowych tzn. inne klasy tego samego pakietu uzyskują dostęp do danego elementu, dla klas spoza pakietu element ten jest prywatny dzięki dostępowi przyjaznemu możliwe jest grupowanie spokrewnionych klas w pakiety umożliwiające łatwą komunikację pomiędzy klasami występowanie dostępu przyjaznego wymaga od programisty dbałości o grupowanie klas w pakiety.

Widoczność składowych modyfikator public udostępnia daną składową dla wszystkich klas korzystających z danej klasy modyfikator protected udostępnia składową wszystkim klasom pochodnym (znajdującym się niżej w hierarchii dziedziczenia) modyfikator private oznacza, że dana składowa jest udostępniana jedynie z wnętrza innych metod danej klasy zalecenia: dostęp przyjazny jest w większość przypadków wystarczającym sposobem ukrywania składowych dodczas projektowania typowym problemem powinny być określenie które metody powinny być publiczne, a nie prywatne

Widoczność klasy modyfikator dostępu dla klasy W języku Java możliwe jest określenie dostępności dla klas. dostęp publiczny: modyfikator public, klasa jest dostępna dla wszystkich dostęp przyjazny: brak modyfikatora, klasa jest dostępna jedynie wewnątrz pakietu nie jest dopuszczalne używanie modyfikatorów private i protected

Organizowanie programów kod źródłowy zapisywany jest w jednostkach kompilacji czyli plikach z rozszerzeniem.java w danej jednostce kompilacji może znajdować się co najwyżej jedna klasa publiczna jeżeli w pliku znajduje się definicja klasy publicznej, to nazwa pliku musi mieć postać nazwaklasypublicznej.java po kompilacji dla każdej klasy z pliku.java tworzone są pliki wynikowe z rozszerzeniem.class działający program to zbiór plików.class; interpreter Javy odpowiada za znajdowanie i interpretowanie tych plików

Pakiety tworzenie pakietu pakiety to mechanizm grupowania klas w biblioteki wskazanie, że dana jednostka kompilacji należy do pakietu jest realizowane przez umieszczenie na początku pliku deklaracji package z nazwą pakietu: package mojpakiet;

Pakiety wykorzystanie (klasy z) pakietu wskazanie kompilatorowi/interpreterowi skąd pobrać potrzebne klasy jest realizowane przy pomocy słowa kluczowego import import mojpakiet.klasaprzykladowa // import klasy KlasaPrzykladowa z pakietu mojpakiet import mojpakiet.*; // import wszystkich klas z pakietu mojpakiet odwołanie do obcej klasy możliwe jest również poprzez użycie nazwy z pełnym kwalifikatorem (wtedy nie jest potrzebny import): mojpakiet.klasaprzykladowa kp = new mojpakiet.klasaprzykladowa() nazwa z pełnym kwalifikatorem powinna zostać również użyta w przypadku gdy w dwóch bibliotekach znajdują sie klasy o tej samej nazwie

Pakiety Jak interpreter/kompilator znajduje pakiety/klasy zmienna środowiskowa CLASSPATH zawiera listę ścieżek poszukiwań dla klas Javy, np. CLASSPATH=.:/home/to/lib/java jeżeli klasa jest elementem pakietu, to odpowiadający jej plik musi znajdować się w katalogu o tej samej nazwie, co nazwa pakietu; nazwa ta dodawana jest do ścieżek poszukiwań jako podkatalog: import mojpakiet.klasaprzykladowa // szukany plik mojpakiet/klasaprzykladowa.class // lub /home/to/lib/java/mojpakiet/klasaprzykladowa.class jeżeli nazwa pakietu zawiera kropki, są one zamieniane na znak / lub \, w zależności od systemu operacyjnego import narzedzia.interfejsy.mojpakiet.klasaprzykladowa // szukany plik narzedzia/interfejsy/mojpakiet/klasaprzykladowa.class // lub /home/to/lib/java/narzedzia/interfejsy/mojpakiet/klasap w ten sposób biblioteki klas organizuje się w hierarchie