Aplikacje w środowisku Java

Podobne dokumenty
Aplikacje w środowisku Java

Dokumentacja do API Javy.

Dziedziczenie. dr Jarosław Skaruz

Programowanie obiektowe

Programowanie obiektowe

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

PHP 5 język obiektowy

Programowanie obiektowe

Programowanie obiektowe

Klasy abstrakcyjne i interfejsy

Wykład 7: Pakiety i Interfejsy

Polimorfizm. dr Jarosław Skaruz

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe

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

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

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

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

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dziedziczenie. Tomasz Borzyszkowski

Klasy abstrakcyjne, interfejsy i polimorfizm

Technologie i usługi internetowe cz. 2

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

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

Java: interfejsy i klasy wewnętrzne

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wykład 6: Dziedziczenie

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Aplikacje w środowisku Java

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Programowanie obiektowe

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

Programowanie obiektowe i zdarzeniowe

Typy sparametryzowane

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Programowanie Obiektowe Ćwiczenie 4

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

Szablony funkcji i klas (templates)

Wykład 5 Okna MDI i SDI, dziedziczenie

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

Interfejsy i klasy wewnętrzne

Programowanie obiektowe

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

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

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Podstawy programowania III

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

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

10. Programowanie obiektowe w PHP5

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

Mechanizm dziedziczenia

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Programowanie w Internecie. Java

Programowanie w Javie wykład 8 Interfejsy

Programowanie obiektowe. Wykład 03. Maciej Wołoszyn 17 marca Polimorfizm oraz wczesne i późne wiazanie

Mechanizm dziedziczenia

Kurs WWW. Paweł Rajba.

Przypomnienie o klasach i obiektach

Programowanie obiektowe - 1.

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

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

Remote Method Invocation 17 listopada 2010

Podstawy Języka Java

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

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

Programowanie obiektowe

Programowanie obiektowe

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

Podejście obiektowe do budowy systemów rozproszonych

PARADYGMATY PROGRAMOWANIA Wykład 4

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

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

Podstawy i języki programowania

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

Dziedziczenie. Zadanie 1

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

Programowanie obiektowe

Multimedia JAVA. Historia

Materiały do zajęć VII

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

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

Aplikacje w środowisku Java

Pakiety i interfejsy. Tomasz Borzyszkowski

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Języki programowania imperatywnego

Laboratorium 1 - Programowanie proceduralne i obiektowe

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

Transkrypt:

Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019

W ramach poprzedniego laboratorium zaprezentowano tworzenie klasy i metod. Kolejnym, niezwykle ważnym aspektem programowania obiektowego jest pojęcie dziedziczenia. Umożliwia tworzenie hierarchicznej struktury klas w ramach aplikacji. Klasę, która stanowi bazę do dziedziczenia, nazywamy bazową / nadrzędną. Klasy, które dziedziczą, nazywamy pochodnymi / podklasami. Dziedziczenie odbywa się z wykorzystaniem słowa kluczowego Extends. firmy. Utwórzmy klasę bazową Employee, przechowującą podstawowe dane o pracowniku public class Employee { String name; String surname; String job; public Employee(String name,string surname,string job){ this.name = name; this.surname = surname; this.job = job; Należy zwrócić uwagę na konstruktor. Przyjmuje on w parametrach wartości dla wszystkich pól w klasie. Ponieważ wszystkie pola, z których korzystamy, są niestatyczne (oznacza to, że nie można odwołać się do nich bez tworzenia obiektu), możemy zrezygnować z przekazywania obiektu jako parametr. Przygotujmy metodę, pozwalającą na wyświetlenie danych pracownika. public void showinfoaboutemployee(){ System.out.println("Pracownik " + name + " " + surname + " pracuje na stanowisku: " + job ); Taka implementacja metody sprawi, iż wyświetlone zostaną wartości pól obiektu, który ją wywołał. Rozszerzmy klasę Employee dwoma klasami, dodającymi informacje o zarobkach pracowników. public class PhysicalWorker extends Employee { double workhour; double hoursalary; 2

Najważniejsze jest słowo kluczowe extends oraz fakt, że w klasie pojawiają się tylko 2 pola. Dzięki mechanizmowi dziedziczenia, obiekty tej klasy będą miał pola name, surname, job. Napiszmy konstruktor tej klasy, korzystający z dziedziczenia. public PhysicalWorker(String name, String surname, String job, double workhour, double hoursalary){ super(name,surname,job); this.workhour = workhour; this.hoursalary = hoursalary; Nowością jest słowo kluczowe super. Oznacza ono wywołanie konstruktora nadklasy (parametry sugerują, iż jest to konstruktor zaprezentowany na poprzedniej stronie dokumentu). Utwórzmy obiekt i sprawdźmy, jakie będą jego parametry. PhysicalWorker physicalworker = new PhysicalWorker("Andrzej", "Kowalski", "Malarz", 168, 20.5); Zwróćmy uwagę, iż mimo wywołania konstruktora podklasy, utworzony został obiekt posiadający pola z klasy bazowej. Jest to wynik działania słowa kluczowego super. Spróbujmy utworzyć drugą klasę dziedziczącą: public class WhiteCoat extends Employee { double monthlysalary; public WhiteCoat(String name, String surname, String job, double monhtlysalary){ super(name,surname,job); this.monthlysalary = monhtlysalary; Podobnie jak w przypadku klasy PhysicalWorker, napisany został konstruktor, korzystający ze słowa kluczowego super. public WhiteCoat(String name, String surname, String job, double monhtlysalary){ super(name,surname,job); this.monthlysalary = monhtlysalary; 3

Utwórzmy obiekt klasy WhiteCoat: WhiteCoat wc = new WhiteCoat("Adam", "Kowalski", "Kierownik", 6000.00); Mechanizm dziedziczenia umożliwia wykorzystywanie metod z nadklasy. Utwórzmy metodę, pozwalającą na wyświetlenie podstawowych informacji o pracowniku: public void showinfoaboutemployee(){ super.showinfoaboutemployee(); System.out.println("Posiada pensję równą: " + monthlysalary); Klasa bazowa posiada metodę, pozwalającą na wyświetlenie podstawowych informacji o pracowniku. Nie posiadają jej jednak klasy dziedziczące. Dzięki mechanizmowi dziedziczenia, nie ma konieczności pisania całej funkcji od początku. Napiszmy analogiczną funkcję w klasie PhysicalWorker. public void showinfoaboutemployee(){ super.showinfoaboutemployee(); System.out.println("Posiada pensję równą: " + String.format("%.2f",calculateSalary())); Metoda calculatesalary jest metodą w klasie PhysicalWorker i wygląda następująco: private double calculatesalary() { return workhour * hoursalary; Zwróćmy uwagę na strukturę metody showinfoaboutemployee. Znajduje się w niej odwołanie do metody o tej samej nazwie, zadeklarowanej w klasie bazowej. W kolejnej linii dodano rozszerzenie metody z klasy bazowej. Działanie kodu: 4

Dzięki dziedziczeniu nie tylko nie musimy ponownie deklarować pól. Możemy także skorzystać z metod, zaimplementowanych w nadklasie. Obiekty klas dziedziczących, posiadają dostęp do metod z nad-klas. Przygotujmy metodę w klasie Employee i wywołajmy ją przez obiekt klasy dziedziczącej. public void baseclassfunction(){ System.out.println("Metoda z klasy bazowej"); Po utworzeniu obiektu klasy potomnej (PhysicalWorker), możemy skorzystać z metod z klasy bazowej. pw.baseclassfunction(); Udało się wywołać metodę, mimo, iż nie znajduje się ona w klasie PhysicalWorker. Wspomniane wcześniej słowo kluczowe super możemy wykorzystać także w kontekście metod. Napiszmy metodę wyświetlającą tekst i zaimplementujmy ją w klasie Employee. public void showsth(){ System.out.println("Metoda klasy bazowej"); Napiszmy metodę o tej samej nazwie (ale innym ciele) w klasie potomnej. public void showsth(){ System.out.println("Metoda podklasy"); Jeśli wywołamy tę metodę poprzez obiekt podklasy, wyświetlona zostanie: Jeśli usuniemy metodę z klasy PhysicalWorker, ale zostawimy jej wywołanie, wyświetlone zostanie: 5

Jeśli w klasie potomnej wpiszemy nazwę metody (np. w innej metodzie), która znajduje się zarówno w tej klasie jak i w klasie bazowej, wykonana zostanie metoda z tej samej klasy. Istnieje jednak możliwość wywołania metody z nadklasy: public void callingtwomethods(){ showsth(); super.showsth(); pw.callingtwomethods(); Dzięki słowu kluczowemu super, udało się wskazać, która metoda ma być wykonana. 6

Interfejsy Interfejs można określić jako wzorzec, szkielet, zawierający informacje na temat metod, które powinny znaleźć się w klasie. Można stwierdzić, iż interfejs definiuje, co powinna robić klasa, jednak nie określa, w jaki sposób. To należy do klasy implementującej interfejs. W środowisku IntelliJ interfejs tworzymy podobnie jak klasę, jednak z listy wyboru należy wybrać opcję interface. Po dodaniu interfejsu, pojawi się plik: public interface additionaldata { W interfejsie należy wprowadzić metody, które mają posiadać implementujące go klasy. Istotnym jest, że w interfejsie nie określamy ciała metody: public void showhobby(string hobby); Od Javy w wersji 8 istnieje możliwość definiowania domyślnego ciała metody w interfejsie. Realizowane jest to z wykorzystaniem słowa kluczowego default. default public int calc(int a, int b) { return a + b; ; W innym przypadku, ciało metody zostanie dodane w klasie, która zaimplementuje interfejs. Implementacja interfejsu odbywa się z wykorzystaniem słowa implements. public class PhysicalWorker extends Employee implements additionaldata Należy podkreślić, iż klasa może dziedziczyć tylko po jednej klasie (extends ), jednak może również implementować wiele interfejsów. Jak zostało wspomniane, klasa musi zaimplementować WSZYSTKIE metody interfejsu (w przeciwnym wypadku, kompilator zgłosi błąd). 7

public void showhobby(string hobby){ System.out.println("Hobby pracownika to: " + hobby); Każda z klas implementujących interfejs może nadać metodzie całkowicie inne ciało. Również nazwy parametrów mogą się od siebie różnić ważne, by implementacja metody miała taką samą liczbę argumentów o zgodnych typach. Zadania: Utwórz klasę Person, zawierającą informacje o osobie (imię, nazwisko, wiek, nr pesel). Zastosuj odpowiednie typy danych. Zaimplementuj w niej metodę, pozwalającą na wyświetlenie danych. Utwórz konstruktor parametrowy. Utwórz klasę Student, dziedziczącą po klasie Person. Rozszerz ją o nazwę szkoły, klasę i ulubiony przedmiot. Napisz odpowiedni konstruktor oraz metodę wyświetlającą pełne dane o osobie. Wykorzystaj słowo kluczowe super. Utwórz klasę Employee, dziedziczącą po klasie Person. Rozszerz ją o nazwę firmy, zarobki oraz stanowisko. Napisz odpowiedni konstruktor oraz metodę wyświetlającą pełne dane o osobie. Wykorzystaj słowo kluczowe super. Utwórz interfejs AdditionOperation, posiadający metody: showparameters(string parametr) showadditionaldata(string parameter, int parameter2) Zaimplementuj interfejs w klasach dziedziczących. Wykonaj implementację metod interfejsu. Metoda showparameters powinna wyświetlać: Nazwę ulubionego przedmiotu ucznia Imię i nazwisko ulubionego kolegi z pracy Metoda showadditionaldata powinna wyświetlać: Liczbę opuszczonych dni oraz ocenę zachowania ucznia Liczbą wykorzystanych dni urlopu W klasie bazowej napisz metodę wyświetlającą informacje o przedmiocie. Wywołaj ją poprzez obiekt podklasy. 8