Inicjalizacja i sprzątanie

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Mgr inż.Marcin Borkowski Podstawy Java Część II
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Programowanie obiektowe
Programowanie obiektowe
Wzorce.
Prowadzący: mgr inż. Elżbieta Majka
Static, const, volatile.
Wprowadzenie do języka skryptowego PHP – cz. 2
PROGRAMOWANIE STRUKTURALNE
formatowanie kodu źródłowego
Programowanie obiektowe w Javie
ODE Triggery. Wstęp n Triggery są trójką zdarzenie-warunek-akcja (event-condition- action). n Zdarzenia mogą być proste lub złożone, co zostanie omówione.
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
Wskaźniki. Definiowanie wskaźników Wskaźnik może wskazywać na obiekt dowolnego typu. int * w; char * Wsk_Znak; float * Wskaz_Real; Przykłady: Wskaźnik.
Struktury.
Tablice.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Języki programowania obiektowego
dr Anna Kwiatkowska Instytut Informatyki
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Programowanie obiektowe III rok EiT
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Warsztaty C# Część 6 Grzegorz Piotrowski Grupa .NET PO
Podstawy informatyki 2013/2014
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe 2013/2014
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – wykład 9 ( )
Programowanie w języku C++
Programowanie strukturalne i obiektowe C++
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Klasy ( uzupełnienie ). Definicja klasy Klasa jest zbiorem logicznie powiązanych danych i funkcji, przeznaczonych do realizacji konkretnego zadania; Zamknięcie.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Konstruktory i Destruktory. Konstruktor Konstruktor — co to? Konstruktor — co to? jest metodą służącą do inicjowania obiektów danej klasy jest metodą.
Programowanie Zaawansowane
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
Wykład 4 Klasa Vec, której konstruktory alokują pamięć dla obiektów 1.Przykład definicji klasy Vec 2.Definicje konstruktorów i destruktora 3.Definicja.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Programowanie Obiektowe – Wykład 6
Kurs języka C++ – wykład 3 ( )
Wątki, programowanie współbieżne
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Kurs języka C++ – wykład 4 ( )
Klasy wewnętrzne. Praktyka użycia interfejsów i klas wewnętrznych
PGO Interfejsy Michail Mokkas.
Założenia projektowe Javy
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
PGO Przeciążanie metod i konstruktorów
Zapis prezentacji:

Inicjalizacja i sprzątanie Wykonał: Marcin Ganczarek 140544

Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Gwarantowana inicjalizacja przez konstruktor W Javie pojęcia tworzenia i inicjalizacji obiektu połączono Do tworzenia i inicjalizacji obiektu służy specjalna metoda nazwana konstruktorem Konstruktor nie zwraca żadnej wartości i nie można tego zmienić Jeżeli napiszemy klasę bez konstruktora to kompilator automatycznie utworzy konstruktor domyślny za nas Konstruktor domyślny to konstruktor nie pobierający żadnych argumentów

Gwarantowana inicjalizacja przez konstruktor Proste przykłady klas z konstruktorem 1. Konstruktor bez argumentów class Ala { Ala() System.out.println(”Ala ma kota”); } 2. Konstruktor z argumentami class Ola { Ola (int i) System.out.println(”Ola ma” + i + ”kotów”); }

Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Przykład klasy z przeciążonymi metodami Przeciążanie metod Przykład klasy z przeciążonymi metodami class Drzewo { int wysokość; Drzewo() { System.out.println(”Zasadzenie ziarna”); wysokość = 0; } Drzewo(int i) { System.out.println(”Stworzenie drzewa o wysokości ” + i + ”metrów”); wysokość = i; void info() { System.out.println(”Wysokość drzewa to ” + wysokość + ”metrów”); void info(String s) { System.out.println(s + ”: Wysokość drzewa to ” + wysokość + ”metrów”);

Przeciążanie metod Każda przeciążona metoda musi posiadać unikatową listę typów argumentów Nie można użyć typu wartości zwracanej do odróżnienia metod przeciążonych Różnica w kolejności argumentów jest wystarczająca, aby odróżnić dwie metody class Student { Student(String s, int i) { System.out.println(s + ” otrzymał ocenę ” + i); } Student(int i, String s) { System.out.println(i + ” to ocena ” + s);

Przeciążanie metod Słowo kluczowe this – zwraca odwołanie do obiektu, na rzecz którego metoda została wywołana. Może być stosowane tylko wewnątrz metody Wywołując metodę klasy z wnętrza innej metody tej klasy, nie ma potrzeby używania this this jest wykorzystywane tylko w przypadkach, kiedy trzeba jawnie użyć odwołania do aktualnego obiektu Słowo kluczowe this umożliwia nam wywoływać jeden konstruktor z drugiego

Przeciążanie metod Wywołanie konstruktora za pomocą this musi być pierwszą rzeczą, którą robimy Stosując słowo kluczowe this można wywołać tylko jeden konstruktor Za pomocą this nie można wywołać konstruktora z wnętrza jakiejkolwiek metody nie będącej konstruktorem

Przykład wywoływania konstruktora z konstruktora Przeciążanie metod Przykład wywoływania konstruktora z konstruktora class pies { pies(int i) { System.out.println(”Mam ” + i + ” psów”); } pies(String s) { this(i); System.out.println(s + ” ma psa”); pies(String s, int i) { this(s); System.out.println(s + ” ma ” + i + ” psów”);

Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Sprzątanie: finalizacja i odśmiecanie pamięci Różnice między Java a C++ Java nie pozwala na tworzenie obiektów lokalnych Java nie posiada destruktorów W C++ obiekty zawsze są niszczone, podczas gdy w Javie obiekty nie zawsze ulegają odśmiecaniu Podsumowując W Javie: Obiekty mogą nie zostać poddane odśmiecaniu Odśmiecanie pamięci to nie destrukcja Odśmiecanie dotyczy wyłącznie pamięci

Sprzątanie: finalizacja i odśmiecanie pamięci Do zwalniania pamięci w Javie stosuje się metody finalize() i odśmiecacz pamięci Metodę finalize() definiuje się we własnej klasie i wykorzystuje się ją przeważnie w przypadkach, w których obiekt może alokować pamięć inaczej niż poprzez stworzenie obiektu Metodę finalize() stosuje się także do weryfikacji warunku zakończenia obiektu Finalizacja i odśmiecanie nie są zagwarantowane

Sprzątanie: finalizacja i odśmiecanie pamięci Różne sposoby pracy różnych odśmiecaczy Zliczanie referencji Odśmiecacze kopiujące Adaptacyjny model odśmiecania ”Przyśpieszacze” JVM Ładowacz klas (ang. loader) Kompilator Just-In-Time (JIT) Technologie Java HotSpot

Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Inicjalizacja składowych W Javie w porównaniu do C++ pozwala na przypisanie wartości w miejscu definicji zmiennej wewnątrz klasy Można wywołać metodę żeby była wartością początkową pod warunkiem, że metoda taka może posiadać argumenty , które już zostały zainicjalizowanymi składowymi klasy Tak można napisać class A { int i = f(); int j = g(i); // … } Tak nie można napisać class A { int j = g(i); int i = f(); // … }

Inicjalizacja składowych Do przeprowadzenia inicjalizacji można wykorzystać konstruktor Kolejność inicjalizacji wewnątrz klasy jest wyznaczona przez kolejność definiowania zmiennych w danej klasie Jeżeli zmienna typu podstawowego (boolean, char, byte, short, int, long, float, double, void) jest składową klasy to ma zapewnioną domyślną wartość początkową Zmienne definiowane jako static mają taką samą inicjalizacje jak w przypadku zmiennych nie będących statycznymi. Inicjalizacja statyczna występuje tylko raz wtedy , gdy jest potrzebna

Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Inicjalizacja tablic W Javie tablice można zdefiniować w następujący sposób int[] a1; albo int a1[] Tablica jest ciągiem obiektów albo zmiennych typu podstawowego, wszystkich tego samego typu, zebranych pod wspólną nazwą Przy definiowaniu tablicy nie można ustalić jej wielkości. Aby stworzyć obszar dla tablicy trzeba użyć wyrażenia inicjalizującego Tablice posiadają własną składową lenght mówiącą ile jest elementów w tablicy Tablice można zainicjalizować w następujący sposób int[] a1 = {1, 2, 3}; albo int[] a1 = new int[20]

Inicjalizacja tablic Tablica obiektów Przy tablicach obiektów po wpisaniu komendy Obiekty[] a = new Obiekty[rand.nextInt(20)] W celu utworzenia tablicy, inicjalizacja nie jest kompletna, gdyż otrzymamy tylko tablice referencji, dopóki same referencje nie zostaną zainicjalizowane przez stworzenie nowych obiektów typu Obiekty a[i] = new Obiekty(rand.nextInt(4))

Inicjalizacja tablic Tworzenie tablic wielowymiarowych int[][] a1 = { {1, 2, 3, }, {4, 5, 6, }, }; int[][][] a2 = new int[2][2][4]; Tworzenie tablicy wielowymiarowej obiektów Integer[][] a3 ={ { new Integer(1), new Integer(2), }, { new Integer(3), new Integer(4), }, { new Integer(5), new Integer(6), }, };

KONIEC