Java 3 MPDI Programowanie obiektowe W5
Java - obiektowy język programowania stworzony przez firmę Sun Microsystems. Java jest językiem tworzenia programów źródłowych kompilowanych do tzw. kodu bajtowego - czyli postaci wykonywanej przez maszynę wirtualną. Podstawowe koncepcje zostały przejęte z języka Smalltalk oraz z języka C++ (duża część składni i słów kluczowych).
Platforma Eclipse – początki IBM -elastyczna - może być dowolnie modyfikowane i rozszerzane przy pomocy wtyczek -darmowa -napisana w Javie -nie tylko Java – także C++, PHP, Python, JavaScript, Cobol -kontrolki graficzne SWT - podobne do Windows – pakiet Swing
Kod źródłowy programów Javy kompiluje się do kodu pośredniego. Powstały kod jest niezależny od systemu operacyjnego i procesora. Java virtual machine tłumaczy kod uniwersalny na kod dostosowany dla konkretnego SO i procesora. Wirtualna maszyna Javy jest już dostępna dla większości systemów operacyjnych i procesorów. WADA kod pośredni jest interpretowany - jest wolniejszy niż kompilowany do kodu maszynowego. można dodatkowy kompilator (JIT lub GCJ) i wówczas już nieprzenośny kod ale dla konkretnej maszyny. Niezależność od architektury
Instalacja Eclipse Platformę Eclipse można ściągnąć z: Aby prawidłowo działała należy zainstalować środowisko uruchomieniowe (maszyna wirtualna)- SUN lub Oracle: JRE – Java Runtime Evironment lub dające większe możliwości programistom JDK – Java Development Kit – daje możliwość m.in. tworzenia, kompilacji i uruchamiania aplikacji bezpośrednio w Windows. Eclipse (Helios) Następnie rozpakowujemy i kopiujemy pliki Eclipse – nie ma pliku instalacyjnego
kompilacja – javac uruchomienie - java plik.java (kod źródłowy) plik.class bez Eclipse z JDK (Java SDK)
Pierwszy program Uruchamiamy Eclipse, wybierając jako workspace (obszar roboczy) własny folder
Nowa klasa - typ obiektowy
klasy w ramach pakietu "widzą" się nawzajem Pakiety - ułatwiają organizację klas Package – pakiet klas Jedna z klas pakietu powinna mieć metodę main W tej metodzie definiujemy działanie aplikacji
każda metoda musi: deklarować, jakiego typu dane zwraca (lub void, jeśli nic nie zwraca). oznacza, że każda wprowadzana zmienna czy pole musi mieć: przypisany typ przechowywanych w niej danych Silne typowanie
package standard; public class Hello { public static void main(String[] args) { System.out.println("Witaj w świecie Javy"); } metoda main – wykonywana! tu zazwyczaj tworzymy nowe obiekty dla danej klasy (własnej lub zdefiniowanej) i zmuszamy je do działania! Klasa z metodą main Nazwa klasy taka sama jak nazwa pliku.java z definicją klasy
menu Run i wybieramy Run as > Java Application zielona ikona z białą strzałką Uruchomienie programu konsola (Console) – wyniki to co ustalimy w instrukcji System.out.println(……………);
Pola i metody dla klasy Pola mogą być typów prostych, ale jest wiele typów obiektowych zdefiniowanych w Javie – także wymagających poznania (i dołączenia odpowiednich bibliotek)
Podstawowe typy danych Typzawartość wartość domyślna rozmiarMin wartość Max wartość boolean logiczna (true lub false) false1 bit char znak (Unicode) u bit\u0000 \uFFFF byte całkowita ze znakiem 08 bit short całkowita ze znakiem 016 bit int całkowita ze znakiem 032 bit long całkowita ze znakiem 064 bit float zmiennoprzecinkowa bit+/ E+38 +/ E-45 double zmiennoprzecinkowa bit+/ E+308 +/ E-324
Operatory arytmetyczne + – / * % (reszta z dzielenia całkowitego) – zmiana znaku inkrementacja i dekrementacja (forma przedrostkowa i przyrostkowa) Operacje arytmetyczne
Operatory przypisania Operator = += – = *= /= %= np. x*=yoznacza x=x*y
Operatory relacyjne = = = równe !=różne Operatory logiczne ! negacja && logiczne AND || logiczne OR Składnia: zmienna=warunek ? wartość_jeśli_prawda :wartość_jeśli_fałsz ; Operator warunkowy ?
– styl "wielbłądzi" kapitalizowanie drugiego i następnych słów składowych jest nieobowiązkowy, ale dobra praktyka programowania w Javie DUŻE I MAŁE litery istotne mojPierwszyProgram
private int łódź; łódź=10; System.out.println(łódź/2); W nazwach zmiennych i metod można używać polskich liter – dzięki wbudowanemu kodowaniu Unicode
niepoprawny kod jest podkreślony na czerwono po lewej stronie na marginesie – ikonka podpowiedzi! Błędy okno z zakładką TASKS – po prawej
np. napisanie sysout i CTRL+spacja spowoduje: Pomoce Wszystkie w: Window > Preferences i wybrać Java > Editor > Templates System.out.println();
public class Klasa1 { public static void main(String[] args) { int suma,A,B,C; A=4;B=7;C=9; suma=A+B+C; System.out.println("Wynik dodawania: "+ suma); int reszta= C % A; System.out.println("Reszta z dzielenia 9/4: "+ reszta); double y;//deklaracja y=5.2;//przypisanie wartości double Zet=7.56;//deklaracja i przypisanie System.out.println("Dzielenie: "+ y/Zet); } Klasa z metodą main instrukcje i deklaracje można przeplatać UWAGA na średniki! ;
package standard; public class Kwadrat { // właściwości (atrybuty/pola) private float bok; private float pozycja; private int kolor; //lepiej obiekt java.awt.Color // operacje (metody) public float obliczPole() { return bok*bok; } public void wyświetl(){ System.out.println(obliczPole()); } Definicja klasy – nie ma metody main
Schemat definicji pól i metod definicja pola public|privatetypnazwa [ =wartość]; public|privatetyp|voidnazwa { co ma robić metoda return wyrażenie_typu_typ //jeśli nie void! } definicja metody | - alternatywnie [ ] - opcjonalnie public – dostępne w innej klasie pakietu private – niedostępne – tylko z wykorzystaniem metod! Przeważnie pola są prywatne, a metody publiczne, ale oczywiście może być inaczej
package standard; public class program { public static void main(String[] args) { Kwadrat p=new Kwadrat(); } Tworzymy instancję obiektu w klasie ale jakie parametry – wartości pól ma kwadrat? Nowa klasa z metodą main
można tak – tworzymy definicję metody: package standard; public class Kwadrat { // właściwości (atrybuty/pola) private float bok; private float pozycja; private int kolor; //lepiej obiekt java.awt.Color // operacje (metody) public void nadajBok(float a) { bok=a; } public float obliczPole() { return bok*bok; } public void wyświetl(){ System.out.println(obliczPole()); }
i teraz… package standard; class program { public static void main(String[] args) { Kwadrat p=new Kwadrat(); p.nadajBok(5); p.wyświetl(); }
package standard; public class Kwadrat { // właściwości (atrybuty/pola) private float bok; private float pozycja; private int kolor; //lepiej obiekt java.awt.Color // operacje (metody) public Kwadrat(float a) { //metoda KONSTRUKTORA!!!! bok=a; } public float obliczPole() { return bok*bok; } public void wyświetl(){ System.out.println(obliczPole()); } albo bardziej elegancko…
package standard; public class program { public static void main(String[] args) { Kwadrat k=new Kwadrat(5); k.wyświetl(); } i przy tworzeniu obiektu nadajemy wartość jako argument konstruktora
package standard; public class program { public static void main(String[] args) { Kwadrat k1=new Kwadrat (5); Kwadrat k2=new Kwadrat (7); k1.wyświetl(); k2.wyświetl(); } można utworzyć wiele obiektów.. instancji klasy
public class Kwadrat { private double bok; private float pozycja; private int kolor; //lepiej obiekt java.awt.Color public Kwadrat (double a) { bok=a; } public Kwadrat (int k) { kolor=k;} public float obliczPole() { return bok*bok; } public void wyświetl(){ System.out.println(obliczPole()); } może być wiele konstruktorów: ale muszą się różnić liczbą lub typem argumentów, bo maja te same nazwy
Dziedziczenie public class Figura { private float pozycja; private int kolor; //metody public float obliczPole() { return 0; } public void wyświetl(){ System.out.println(obliczPole()); }
public class Kwadrat extends Figura{ private float bok; //pozycja i kolor dziedziczone private int kolor; //lepiej obiekt java.awt.Color public Kwadrat (int a) { bok=a; // "przesłaniamy" operacje rodzica public float obliczPole() { return bok*bok; }
Projekt hierarchii klas dziedziczących powinien być sensowny Np. klasa Auto dziedziczy po klasie Pojazd klasa Student dziedziczy po klasie Człowiek itp. Klasa dziedzicząca domyślnie posiada wszystkie metody przodka i można w niej definiować nowe. Np. Człowiek ma nazwisko Student ma nazwisko i numer indeksu