Java - tablice, konstruktory, dziedziczenie i hermetyzacja



Podobne dokumenty
Programowanie urządzeń mobilnych

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusz Mikoda

Programowanie obiektowe

Podstawy programowania obiektowego

Dziedziczenie. dr Jarosław Skaruz

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

Dokumentacja do API Javy.

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

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

Technologie i usługi internetowe cz. 2

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

Wykład 4: Klasy i Metody

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Wstęp do programowania obiektowego. Wykład 2

Programowanie obiektowe

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

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

Definiowanie własnych klas

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

Enkapsulacja, dziedziczenie, polimorfizm

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Aplikacje w środowisku Java

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

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

Wykład 8: klasy cz. 4

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Java: interfejsy i klasy wewnętrzne

Typy sparametryzowane

Aplikacje w środowisku Java

Klasy i obiekty cz II

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

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

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

Programowanie obiektowe w języku

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

TEMAT : KLASY DZIEDZICZENIE

Java Język programowania

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

Materiały do zajęć VII

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Klasy abstrakcyjne, interfejsy i polimorfizm

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

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

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

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

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

Programowanie obiektowe

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

Technologie obiektowe

Programowanie obiektowe

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

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

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

Programowanie obiektowe

Programowanie obiektowe i język Java

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

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

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Podstawy Programowania Obiektowego

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

Zaawansowane programowanie w C++ (PCP)

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Wykład 5: Klasy cz. 3

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

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Definicje klas i obiektów. Tomasz Borzyszkowski

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Do czego służą klasy?

PHP 5 język obiektowy

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

Wykład 6: Dziedziczenie

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

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

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Laboratorium nr 10. Temat: Funkcje cz.2.

Podstawy Języka Java

Wykład 2: Podstawy Języka

Programowanie Obiektowe i C++

Kompozycja i dziedziczenie klas

1 Atrybuty i metody klasowe

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Platformy Programistyczne Wykład z Javy dla zaawansowanych

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

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

Platformy Programistyczne Podstawy języka Java

Transkrypt:

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak

PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

ZMIENNE TABLICOWE tablice jednowymiarowe int tab[]; // deklaracja tablicy int [] tab2; // równoważna deklaracja tab = new int[5]; // przydział pamięci tab[2] = 5; // odwołanie do elementu tablicy int tab3[] = {1, 2, 3, 4, 5; // inny sposób przydziału pamięci wraz w inicjacją tablicy tablice wielowymiarowe int tablica2d[][]; tablica2d = new int [10] [10]; tablica2d[2][4] = 12;

TABLICE C.D. Java "pamięta" rozmiar tablicy. Można go odczytać w następujący sposób: int n = tab.length; rozmiary tablicy wielowymiarowej: int n = tablica2d.length; int m = tablica2d[0].length; Przypisanie tablicy to przypisanie referencji: int b [] = new int[10]; int a [] = b;

KONSTRUKTOR KLASY...z myślą o użytkownikach, którzy zapominają o inicjalizacji Konstruktor to metoda klasy wywoływana automatycznie bezpośrednio po utworzeniu obiektu. Wywołanie konstruktora jest gwarantowane - nie jest możliwe wykonanie jakiejkolwiek operacji na obiekcie przed wywołaniem konstruktora. Nazwa konstruktora jest taka sama jak nazwa klasy. Konstruktor nie zwraca żadnej wartości (nawet wartości pustej void).

KONSTRUKTOR KLASY...teoria w praktyce... class Prostokat { % int a; % int b; % int pole; % Prostokat( int aa, int bb ) % { % % a = aa; % % b = bb; % % pole = a*b; %

WIELE KONSTRUKTORÓW...różne sposoby tworzenia tego samego Możliwe jest utworzenie kilku konstruktorów różniących się liczbą lub typem przyjmowanych parametrów. Konstruktor nie przyjmujący żadnych wartości to konstruktor domyślny. Jeśli nie zostanie zdefiniowany żaden konstruktor kompilator automatycznie utworzy konstruktor domyślny.

AWANSOWANIE TYPÓW PROSTYCH wywołanie metod z parametrami innych typów niż zdefiniowane byte short char int long float double W przypadku typów prostych, jeśli wywołamy metodę (również konstruktor) z innym parametrem niż zdefiniowany kompilator spróbuje awansować typ zmiennej według powyższego schematu. class A{ % void f(double x){ System.out.println("f(double) "+x); % void f(int x) { System.out.println("f(int) "+x); A a = new A(); a.f(10); // f(int) 10 float x1 = 10.0f; a.f(x1); // f(double) 10.0 char x2 = 'a'; a.f(x2); // f(int) 97

DZIEDZICZENIE...bo czasami wygodnie jest wziąć istniejącą klasę, sklonować ją oraz dołączyć lub zmodyfikować pewne elementy... Dziedziczenie wyraża relację pomiędzy dwoma typami - typem nadrzędnym i podrzędnym (bazowym i pochodnym) posiadającymi wspólną charakterystykę i zachowanie. Typ bazowy zawiera charakterystykę i zachowanie które jest współdzielone z typami dziedziczącymi po nim. Typ pochodny może zawierać bardziej szczegółowe dane, udostępniać więcej metod lub modyfikować działanie niektórych metod z typu nadrzędnego. Typ bazowy jest ogólną ideą, a typ pochodny jej szczególną realizacją

PRZYKŁADY DZIEDZICZENIA ogólne idee i ich konkretne realizacje Typ bazowy Człowiek (Osoba) Pracownik Figura Czworokąt Pojazd Typy pochodne Pracownik, Klient Prezes, Kierownik, Kasjer Koło, Czworokąt Równoległobok, Trapez Samochód, Rower, Hulajnoga

ROZSZERZANIE CHARAKTERYSTYKI...czym różni się Człowiek od Pracownika Osoba (Człowiek) - typ charakteryzowany przez: imię, nazwisko, płeć. Pracownik - szczególny przypadek Człowieka charakteryzowany dodatkowo przez: stanowisko, pensja, dział.

ROZSZERZANIE FUNKCJONALNOŚCI...co może Kierownik, a Pracownik nie Pracownik może: pracować, pobierać pensję, składać podanie o urlop. Kierownik - szczególny przypadek Pracownika, może zrobić to samo co Pracownik oraz dodatkowo: zwalniać pracowników, akceptować podania o urlop, modyfikować wynagrodzenia pracowników.

MODYFIKACJA FUNKCJONALNOŚCI...niby to samo, a jednak inaczej Czworokąt wyznaczenie obwodu: a+b+c+d, Równoległobok - szczególny przypadek czworokąta, ale zmodyfikowana metoda wyznaczania obwodu oraz dodana metoda wyznaczania pola: wyznaczanie obwodu: 2. a + 2. b wyznaczanie pola: a. h Prostokąt - szczególny przypadek czworokąta, ta sama metoda wyznaczania obwodu, ale zmodyfikowana metoda wyznaczania pola: wyznaczanie pola: a. b Romb - szczególny przypadek czworokąta, ta sama metoda wyznaczania pola, ale zmodyfikowana metoda wyznaczania obwodu wyznaczanie obwodu: 4. a Kwadrat - szczególny przypadek Rombu i szczególny przypadek Prostokąta - wielodziedziczenie w Javie nie jest możliwe.

DZIEDZICZENIE W JAVIE teoria w praktyce Dziedziczenie w Javie realizowane jest za pomocą słowa extends class KlasaPochodna extends KlasaBazowa { /*...*/ Przykład dziedziczenia klasy Pracownik i Czlowiek class Czlowiek { % String imie; % String nazwiko; % boolean plec; class Pracownik extends Czlowiek { % String stanowisko; % double pensja; % String dzial;

super jak skłonić Pracownika, żeby zachowywał się jak Człowiek? Dostęp do metod klasy bazowej wewnątrz metod klasy pochodnej realizowany jest za pomocą słowa super class Czlowiek { % String imie; % String nazwisko; % boolean plec; % String przedstawsie(){ % % return imie+" "+nazwisko+" "+(plec?"kobieta":"mezczyzna"); % class Pracownik extends Czlowiek { % String stanowisko; % double pensja; % String dzial; % String przedstawsie(){ % % // wywołanie metody z klasy Czlowiek i "doklejenie" atrybutów z klasy Pracownik % % return super.przedstawsie()+" "+stanowisko+" "+pensja+" "+dzial; % class Kierownik extends Pracownik { /*... */ Jak skłonić Kierownika, żeby zachowywał się jak Człowiek? super.super.przedstawsie(); // Niemożliwe!

HERMETYZACJA pokaż tylko to co musisz - ukrywanie implementacji Programista tworzący klasę powinien udostępnić programiście korzystającemu z klasy tylko to co jest konieczne do wykorzystana jej funkcjonalności. Wszystko inne powinno być ukryte. Cele hermetyzacji: kontrola nad sposobem modyfikacji danych należących do klasy, umożliwienie wymiany mechanizmów realizujących określoną funkcjonalność klasy bez konieczności zmiany kodu programu wykorzystującego tą klasę.

HERMETYZACJA innymi słowami... Bezpośredni dostęp do pól składowych klasy powinny mieć tylko metody należące do danej klasy lub do klas pochodnych. Hermetyzacji powinny podlegać również metody klasy, które nie dostarczają funkcjonalności oferowanej przez klasę, a jedynie realizują wewnętrzne operacje niezbędne do zapewnienia funkcjonalności klasy.

HERMETYZACJA teoria w praktyce W języku Java hermetyzacja jest realizowana za pomocą modyfikatorów dostępu. Istnieją cztery poziomy dostępu publiczny public, chroniony protected, pakietowy - domyślny, brak jawnej specyfikacji dostępu, prywatny private. Modyfikatory dostępu umieszcza się przed deklaracją atrybutu, metody lub klasy. Dla atrybutów i metod można stosować wszystkie modyfikatory dostępu, dla klas jedynie public (lub domyślnie - pakietowy).

PUBLIC dostępne dla wszystkich Dostęp do pól i metod publicznych mają wszyscy, w szczególności programiści korzystający z danej klasy. Zgodnie z zasadami hermetyzacji żadne pola składowe klasy nie powinny być publiczne. Klasa publiczne - tylko jedna w pliku! class A{ % public int x; A a = new A(); a.x = 10; // możliwy zapis atrybutu int y = a.x; // możliwy odczyt atrybutu

PROTECTED dostępne tylko wewnątrz pakietu oraz dla potomków Dostęp do pól i metod jest możliwy jedynie z metod klas należących danej klasy, klas należących do tego samego pakietu lub klas dziedziczących po danej klasie. class A{ protected int x; void f1(){ this.x = 10; // OK int i = this.x; // OK class B extends A{ void f2(){ this.x = 10; // OK int i = this.x; // OK A a = new A(); a.x = 10; // OK tylko wewnątrz pakietu int y = a.x; // OK tylko wewnątrz pakietu

PAKIETOWY dostępne tylko wewnątrz pakietu Dostęp do pól i metod jest możliwy jedynie z metod danej klasy oraz klas należących do tego samego pakietu. class A{ protected int x; void f1(){ this.x = 10; // OK int i = this.x; // OK class B extends A{ void f2(){ this.x = 10; // OK tylko wewnątrz pakietu int i = this.x; // OK tylko wewnątrz pakietu A a = new A(); a.x = 10; // OK tylko wewnątrz pakietu int y = a.x; // OK tylko wewnątrz pakietu

PRIVATE dostępne tylko dla danej klasy Dostęp do pól i metod jest możliwy jedynie z metod tej samej klasy. class A{ protected int x; void f1(){ this.x = 10; // OK int i = this.x; // OK class B extends A{ void f2(){ this.x = 10; // Błąd! int i = this.x; // Błąd! A a = new A(); a.x = 10; // Błąd int y = a.x; // Błąd

METODY DOSTĘPOWE...jak modyfikować to co niedostępne class A{ % private int x; % public int getx() { return this.x; % public void setx(int i) { this.x = i; A a = new A(); //a.x = 10; // BŁĄD a.setx(10); //int i = a.x; // BŁAD int j = a.getx();

this...kolejne zastosowania wywołanie konstruktora wewnątrz innego konstruktora: class A{ % private double y; % private int x; % A(int i){ this.x = i; % A(int i, double d){ % % this(i); % % this.y = d; % Wywołanie konstruktora z klasy bazowej: class B extends A { % B() { super(10); zwrócenie referencji do obiektu, na rzecz którego wywołana jest metoda: class A{ % private int x; % A(int i) { x=i; % int getx() { return x; ; % A inkrementuj() { % % x++; % % return this; % ; A a = new A(10); a.inkrementuj().inkrementuj().inkrementuj(); System.out.println( a.getx() ); // 13