DOSTĘP DO METOD I ZMIENNYCH, TABLICE. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla kaŝdego, Helion 2001)

Podobne dokumenty
DOSTĘP DO METOD I ZMIENNYCH. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001)

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

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

POLIMORFIZM, INTERFEJSY, PROGRAMOWANIE ZDARZENIOWE

Elementy języka Java

Programowanie komponentowe

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

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

Podejście obiektowe. Tablice (1) obiektów

Języki i metody programowania Java Lab4 podejście obiektowe, zastosowanie pojemników

Języki i metody programowania Java INF302W. Wykład 1 (część 1) na podstawie Autor Dr inż. Zofia Kruczkiewicz

Języki i metody programowania Java Obsługa zdarzeń - przykłady

Programowanie w Internecie. Java

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

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

Dokumentacja do API Javy.

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

Kontenery i komponenty graficzne

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Programowanie obiektowe i zdarzeniowe

Wykład 5 Okna MDI i SDI, dziedziczenie

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wykład 4: Klasy i Metody

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Podstawy Języka Java

Wykład 7: Pakiety i Interfejsy

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

Dziedziczenie. dr Jarosław Skaruz

Dziedziczenie jednobazowe, poliformizm

Programowanie obiektowe

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Kompozycja i dziedziczenie klas

Przypomnienie o klasach i obiektach

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

Klasy abstrakcyjne, interfejsy i polimorfizm

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

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

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

Dziedziczenie jednobazowe, poliformizm, tablice wskaźników na obiekty

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe

Programowanie obiektowe

Wykład 2: Podstawy Języka

Enkapsulacja, dziedziczenie, polimorfizm

Aplikacja wielow tkowa prosty komunikator

Wykład 6: Dziedziczenie

Technologie i usługi internetowe cz. 2

Programowanie obiektowe

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

Programowanie komputerowe. Zajęcia 7

1 Atrybuty i metody klasowe

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

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

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe

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

Język Java część 2 (przykładowa aplikacja)

Aplikacje w środowisku Java

Aplikacja wielowątkowa prosty komunikator

Podstawy programowania obiektowego

Programowanie w Javie - wykład 3

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

Programowanie obiektowe

Podstawy programowania obiektowego

Programowanie obiektowe

Aplikacje w środowisku Java

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

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

Programowanie w Javie wykład 7 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Bloki inicjalizacyjne

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

TEMAT : KLASY DZIEDZICZENIE

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

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

JAVA- wykład 2 Klasy

Java: interfejsy i klasy wewnętrzne

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

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

Tworzenie elementów graficznych

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

Definiowanie własnych klas

Połączenia między bazami danych i programem w języku Java część 2

Java Język programowania

Programowanie obiektowe

Podstawy programowania obiektowego

Język Java część 2 (przykładowa aplikacja)

PARADYGMATY PROGRAMOWANIA Wykład 4

Definiowanie własnych klas

TEMAT : KLASY POLIMORFIZM

Java SE Laboratorium nr 2. Temat: Obiektowość

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

Przykład -

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

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

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Transkrypt:

DOSTĘP DO METOD I ZMIENNYCH, TABLICE Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla kaŝdego, Helion 2001) Zakres public protected domyślny private widzialności metody lub zmiennej Klasa tak tak tak tak Pakiet tak tak tak nie Inny pakiet tak nie nie nie Podklasa, tak tak tak nie pakiet Podklasa, inny pakiet tak tak nie nie dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 1

DZIEDZICZENIE PRZECIĄśANIE METOD, PRZEDEFINIOWANIE METOD 1) Dziedziczenie Przykład 1 dziedziczenie metod w klasie pochodnej class Punkt protected int x, y; public Punkt(int wspx, int wspy) x = wspx; y = wspy; public void zmien(int wspx, int wspy) x = wspx; y = wspy; public int podajx() return x; public int podajy() return y; public void przesun(int dx, int dy) x+=dx; y+=dy; public double odleglosc(punkt p) return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 2

class Kwadrat extends Punkt //klasa dziedziczy od klasy Punkt protected int dlugosc; Kwadrat(int wspx, int wspy, int dlugosc_) super(wspx,wspy); //wywołanie dziedziczonego konstruktora dlugosc=dlugosc_; //poniewaŝ nie ma konstruktora domyślnego (jawnego lub niejawnego konstruktora bez parametrów) w klasie // bazowej Punkt-konstruktora domyślnego się nie wywołuje int podajdl() return dlugosc; int pole() return dlugosc*dlugosc; dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 3

public class punkt_ public static void main (String[] args) Kwadrat k1 = new Kwadrat(7,2,5); Te metody są wywołane dzięki dziedziczeniu składowych od klasy Punkt System.out.println("WspolrzednaX = "+ k1.podajx()); System.out.println("WspolrzednaY = "+ k1.podajy()); System.out.println("Dlugosc boku = "+ k1.podajdl()); Punkt p2 = new Punkt(8,2); System.out.println("\nWspolrzednaX = "+ p2.podajx()); System.out.println("WspolrzednaY = "+ p2.podajy()); p2.zmien(1,2); System.out.println("\nOdleglosc = "+ p2.odleglosc(k1)); k1.przesun(1,0); System.out.println("\nOdleglosc = "+ k1.odleglosc(p2)); System.out.println("\nPowierzchnia = "+ k1.pole()); Obiekt klasy Kwadrat posiada metody klasy Punkt i swoje własne (podajdl(), pole() oraz konstruktor Kwadrat(int, int, int). W programie polecenie super pozwala wywołać dziedziczony konstrutor klasy Punkt. Konstruktory domyślne nie trzeba wywoływać (są wywoływane niejawnie), pozostałe konstruktory dziedziczone trzeba zawsze wywołać za pomocą super. Wywołanie p2.odleglosc(k1) zawiera parametr aktualny metody jako referencję do obiektu klasy pochodnej Kwadrat w odniesieniu do typu formalnego tego parametru równego Punkt. dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 4

2) Przedefiniowanie i przeciąŝenie metod Przedefiniowanie nazwy metody met1(...) dziedziczonej wymaga : identycznego nagłówka met1(...) w metodzie klasy dziedziczącej jest to domyślna metoda klasy dziedziczącej metodę bazową w ciele metod klasy dziedziczącej wywołuje się: super.met1(...) PrzeciąŜenie nazwy metody met2(...) wymaga identycznej nazwy met2 róŝnej liczby parametrów róŝnych typów parametrów, jeśli ich liczba jest identyczna typ wyniku zwracanego przez return nie przeciąŝa nazwy metody dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 5

Przykład 2 - wykonanie programu prezentującego dziedziczenie, przedefiniowanie i przeciąŝenie metod k1(2, 10) import java.lang.*; class Punkt protected int x, y; p2(1, 5) p2(4, 6) public Punkt(int wspx, int wspy) x = wspx; y = wspy; public void zmien(int wspx, int wspy) x = wspx; y = wspy; public int podajx() return x; public int podajy() return y; public void przesun(int dx, int dy) x+= dx; y+= dy; public int pole () return 0; public double odleglosc(punkt p) return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 6

class Kwadrat extends Punkt protected int dlugosc; public Kwadrat(int wspx, int wspy, int dlugosc_) super(wspx, wspy);` //wywołanie dziedziczonego konstruktora od klasy Punkt dlugosc = dlugosc_; public int podajdl() return dlugosc; public int pole() return dlugosc*dlugosc; public double odleglosc() //przeciąŝenie nazwy metody dziedziczonej return Math.sqrt(x*x+y*y); public double odleglosc(punkt p) //przedefiniowanie nazwy metody dziedziczonej return odleglosc() //wywołanie metody przeciąŝonej + super.odleglosc(p); //wywołanie metody dziedziczonej // gdy jest przedefiniowana public double odleglosc(punkt p, int i) return super.odleglosc(p); //wywołanie metody dziedziczonej, // gdy jest przedefiniowana //przeciąŝenie nazwy metody dziedziczonej dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 7

public class punkt1 //klasa publiczna, nieabstrakcyjna, niefinalna public static void main (String[] args) Kwadrat k1 = new Kwadrat(2,10,1); System.out.println("WspolrzednaX = "+ k1.podajx()); System.out.println("WspolrzednaY = "+ k1.podajy()); System.out.println("Dlugosc boku = " + k1.podajdl()); Punkt p2 = new Punkt(4,6); System.out.println("\nWspolrzednaX = "+ p2.podajx()); System.out.println("WspolrzednaY = " + p2.podajy()); System.out.println( "\nodleglosc miedzy punktami\n(4,6),(2,10)=" + p2.odleglosc(k1)); p2.zmien(1,5); System.out.println( "\nsuma odleglosci miedzy punktami\n(0,0),(2,10),(1,5)=" +k1.odleglosc(p2)); System.out.println( "\nodleglosc miedzy punktami\n(2,10),(1,5)=" + k1.odleglosc(p2,0)); System.out.println( "\nodleglosc miedzy punktami\n(0,0),(2,10)=" + k1.odleglosc()); System.out.println("\nPowierzchnia = "+ k1.pole()); dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 8

1. Tablice w aplikacjach typu Windows Tablica w Javie jest obiektem. TABLICE Deklarowanie tablicy String [] nazwy; //równowaŝne deklaracje zmiennej tablicowej String nazwy []; // czyli referencji do obiektu tablicy, deklarujące elementy obiektowe int liczby[]; //zamienna tablicowa deklarująca elementy nieobiektowe Tworzenie obiektu tablicowego int liczby []= new int [10]; // utworzono tablicę 10 elementów typu int String nazwy []= new String[10]; // utworzono tablicę 10 referencji typu String, naleŝy dla kaŝdego elementu tablicy przydzielić pamięć Przydział pamięci na elementy obiektowe tablicy np. nazwy[0]= new String( Pewien wiersz ); //przydzielono pamięć na obiekt typu String w pierwszym elemencie tablicy (liczby[0]) Pobranie rozmiaru tablicy nazwy.length dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 9

Przykład 3 - przechowanie w tablicy elementów obiektowych polimorfizm (przesłanianie metod) import java.lang.*; class Punkt protected int x, y; public Punkt(int wspx, int wspy) x=wspx; y = wspy; public int podajx() return x; public int podajy() return y; public double odleglosc(punkt p) return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); class Kwadrat extends Punkt protected int dlugosc; public Kwadrat(int wspx, int wspy, int dlugosc_) super(wspx,wspy); dlugosc=dlugosc_; public double odleglosc() return Math.sqrt(x*x+y*y); public double odleglosc(punkt p) return odleglosc()+ super.odleglosc(p); public int podajdl() return dlugosc; Operacje wynikające z polimorfizmu: MoŜna przypisać do referencji klasy podstawowej referencje obiektów klas pochodnych Referencja figury[i] moŝe zawierać referencję do obiektu typu Punkt lub Kwadrat rozróŝnia się te referencje i wywołuje metodę z właściwej klasy. Jest to moŝliwe dzięki przesłanianiu metod odleglosc dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 10

public class Tablice public static void main(string args[]) final int N=5; int liczby [] = new int [N]; for (int i=0; i<liczby.length; i++) liczby[i]= i; System.out.println(liczby[i]); String nazwy[]=new String[N]; for (int i=0; i<nazwy.length; i++) nazwy[i]=new String("lancuch "+i); System.out.println(nazwy[i]); Punkt figury[]=new Punkt[N]; for (int i=0; i<figury.length; i++) figury[i]=new Punkt(2,2); if (i<figury.length-1) figury[++i]= new Kwadrat (2,2,2); for (int i=0; i<figury.length-1;i++) boolean p=figury[i] instanceof Kwadrat; System.out.println(p+ ",X="+figury[i].podajX()+ ", Y="+figury[i].podajY()+ ", odleglosc="+figury[i].odleglosc(figury[i+1])); dr inŝ. Zofia Kruczkiewicz, Programowanie obiektowe Java, wykład 5_1 11

Przykład 4 - przechowanie w tablicy elementów obiektowych polimorfizm (przesłanianie metod) import java.lang.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; class Punkt protected int x, y; public Punkt(int wspx, int wspy) x = wspx; y = wspy; public void rysuj(graphics g) Graphics2D g2d= (Graphics2D)g; Color pedzel =new Color(255,0,0); g2d.setcolor(pedzel); g2d.filloval(x,y,5,5); class Kwadrat extends Punkt protected int dlugosc; public Kwadrat(int wspx, int wspy, int dl) super(wspx,wspy); dlugosc=dl; public void rysuj(graphics g) Graphics2D g2d=(graphics2d)g; Color pedzel= new Color(0,255,0); g2d.setcolor(pedzel); g2d.fillrect(x,y,dlugosc,dlugosc); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 3 12

class Rysunek extends JPanel protected int N=4; protected Punkt figury[]=new Punkt[N]; Rysunek() super(); for (int i=0; i<figury.length; i++) figury[i]= new Punkt(i*20+5, i*20+5); if (i<figury.length-1) figury[++i]= new Kwadrat (i*30+10, i*30+10, i+30); public void paintcomponent(graphics g) super.paintcomponent(g); for (int i=0; i<figury.length; i++) figury[i].rysuj(g); public class Tablice extends JFrame public Tablice() super ("Tablice"); setsize(150,200); setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); Rysunek rys=new Rysunek(); setcontentpane(rys); public static void main(string args[]) Tablice tab=new Tablice(); tab.setvisible(true); Operacje wynikające z polimorfizmu: MoŜna przypisać do referencji klasy podstawowej referencje obiektów klas pochodnych Referencja figury[i] moŝe zawierać referencję do obiektu typu Punkt lub Kwadrat rozróŝnia się te referencje i wywołuje metodę z właściwej klasy. Jest to moŝliwe dzięki przesłanianiu metod rysuj Obiekt klasy JFrame uŝywa obiektu typu JPanel. Klasa Tablice dziedzicząca po klasie JFrame uŝywa obiekt typu Rysunek dziedziczącym po JPanel. Klasa Rysunek przesłoniła metodę paintcomponent. KaŜda klasa dziedzicząca po JFrame uŝywa metody paincomponent od obiektu klasy z rodziny JPanel bez potrzeby rozróŝniania typu tych obiektów. Autor: Zofia Kruczkiewicz, Programowanie w Internecie, wykład 3 13