Programowanie obiektowe



Podobne dokumenty
Programowanie obiektowe

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie obiektowe

Programowanie obiektowe

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

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

Tworzenie aplikacji w języku Java

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Java Język programowania

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

2. Składnia, środowisko i konwencje w Javie

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

Microsoft IT Academy kurs programowania

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

Wprowadzenie do języka Java

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie i projektowanie obiektowe

Programowanie obiektowe

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

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Platformy Programistyczne Podstawy języka Java

Podstawowe części projektu w Javie

Podstawy i języki programowania

Programowanie w Internecie. Java

Java Podstawy. Michał Bereta

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

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

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

MATERIAŁY DO ZAJĘĆ II

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Dokumentacja do API Javy.

Programowanie wieloplatformowe w Java

Definiowanie własnych klas

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

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Programowanie w języku Java WYKŁAD

Programowanie obiektowe

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

Język ludzki kod maszynowy

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

Wykład 2: Podstawy Języka

Programowanie RAD Delphi

Podstawy programowania w języku C

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Wykład 4: Klasy i Metody

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

Wykład 3 Składnia języka C# (cz. 2)

Programowanie urządzeń mobilnych

Programowanie obiektowe

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

Podstawy programowania skrót z wykładów:

Materiały pomocnicze do wykładu 3 - Elementy języka Java

Podstawy Języka Java

1 Podstawy c++ w pigułce.

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Programowanie obiektowe zastosowanie języka Java SE

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

1 Atrybuty i metody klasowe

Języki programowania - podstawy

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

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

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

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

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

Kurs WWW. Paweł Rajba.

Java-wykład. Dorota Pylak

Wstęp do ruby dla programistów javy

1 Podstawy c++ w pigułce.

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

Java EE produkcja oprogramowania

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

KOTLIN. Język programowania dla Androida

Programowanie Komputerów

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Java EE produkcja oprogramowania

Wykład 7: Pakiety i Interfejsy

Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz

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

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Klasy abstrakcyjne i interfejsy

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Podstawy programowania obiektowego

Tablice (jedno i wielowymiarowe), łańcuchy znaków

ECLIPSE wnioski z dwóch pierwszych laboratoriów

Kurs programowania. Wykład 9. Wojciech Macyna

KLASY, INTERFEJSY, ITP

Wprowadzenie do programowaia w języku Java. dr Dariusz Pałka dpalka@up.krakow.pl

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Ćwiczenie 1. Przygotowanie środowiska JAVA

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

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

Transkrypt:

Przygotował: Jacek Sroka 1 Programowanie obiektowe Wykład 3 Java podstawy

Przygotował: Jacek Sroka 2 Przypomnienie Analiza, projektowanie, programowanie, testowanie, wdrażanie Iteracyjnie vs kaskadowo UML Tylko notacja Ułatwia się komunikować Myślenie obiektowe Mniejsza luka reprezentacji Łatwiej zapanować nad złożonością (łatwiej dobrze programować)

Przygotował: Jacek Sroka 3 Przypomnienie c.d. Program = zbiór obiektów Obiekty łączą stan i zachowanie Obiekty zlecają sobie nawzajem pewne odpowiedzialności Posiadanie młotka nie uczyni z ciebie architekta

Przygotował: Jacek Sroka 4 Co dalej Wprowadzenie do Javy Podstawowe konstrukcje języka Uruchamianie programów JVM, JRE, JDK,...

Przygotował: Jacek Sroka 5 Język Java Wysokopoziomowy Kompilowalny Obiektowy Z silną kontrolą typów Składnia wzorowana na C/C++ Bezpieczniejszy (w pewnym stopniu chroni przed głupotą) Przenośny write once run anywhere vs write once debug everywhere "compile once, run anywhere vs "write once, compile anywhere

Przygotował: Jacek Sroka 6 Bajtkod Kompilator nie generuje kodu maszynowego, ale kod pośredni (bajtkod) Bajtkod wykonuje maszyna wirtualna Javy (Java Virtual Machine JVM) Obecnie również inne języki (Scala, Python, Groovy, Ruby, Ada, PHP,...) JMV + standard class libraries = JRE JRE to Java Runtime Environment Standardowe biblioteki implementują Java API (Application Programming Interface) Java SE 7 Oak J2SE 1.4.2 i 5.0 SE, ME, EE

Przygotował: Jacek Sroka 7 Klasy vs obiekty Program to kolekcja obiektów Obiekty są egzemplarzami klas, a klasy są ich typami Typami są też interfejsy Klasa łączy definicję struktury danych ( rekordu ) oraz operacje na tej strukturze Jak JVM napotyka słowo kluczowe new, to tworzy obiekt/egzemplarz mający swój własny stan

Przygotował: Jacek Sroka 8 Witaj Świecie public class HelloWorld { public static void main(string[] args) { System.out.println("Hello world!"); //HelloWorld hw = new HelloWorld(); } } Definicja klasy Modyfikatory dostępu Definicja metody Typ zwrotny Lista parametrów (rozdzielana przecinkiem, najpierw typ potem nazwa) Ciało Składowe klasowe vs egzemplarza Wywołanie metody

Przygotował: Jacek Sroka 9 Uruchamianie Klasa publiczna musi być w pliku o tej samej nazwie Tylko jedna klasa publiczna w pliku W IDE Shift+F6 vs F6 Ctrl+Shift+F5 vs Ctrl+F5 Ctrl+spacja Alt+Shift+F Z konsoli javac java

Przygotował: Jacek Sroka 10 Klasy Wersja minimalistyczna class Pusta { } Atrybuty class Osoba { String imię = "Jan"; String nazwisko; } Metody class Osoba { String imię; String nazwisko; String getimię(){ return imię; } String getnazwisko(){ return nazwisko; } void nicnierobi() {} } Klasa publiczna tylko w pliku o tej samej nazwie (może mieć metodę main())

Przygotował: Jacek Sroka 11 Komentarze Jednowierszowe // To jest komentarz jednowierszowy Wielowierszowe /* To jest komentarz wielowierszowy */ /* A */ /* to */ /* kilka */ /* takich */ /* komentarzy */ int x = /* ala ma kota */ 2; /* To jest komentarz /* to nadal jest komentarz */ a_to_już_nie */ Javadoc /** * Sets the tool tip text. * * @param text the text of the tool tip */

Przygotował: Jacek Sroka 12

Przygotował: Jacek Sroka 13 Identyfikatory Zaczynają się od litery a potem litery lub cyfry Znak "_" jest traktowany jako litera Znak "$ też ale jest zarezerwowany Programy w Javie to napisy w Unicode identyfikatory mogą zawierać znaki narodowe (w tym polskie) Nie ma ograniczenia na długość identyfikatorów Identyfikatory nie mogą być słowami kluczowymi Javy ani literałami true, false i null

Przygotował: Jacek Sroka 14 ćwiczenie Wskaż poprawne deklaracje zmiennej int e#; int.f; int _a; int $c; int -d; int 2_w; int _$; int 7g; int bardzo_długi_i_opisowy_identyfikator; int :b;

Przygotował: Jacek Sroka 15 Ćwiczenie Wskaż poprawne deklaracje zmiennej int e#; int.f; int _a; int $c; int -d; int 2_w; int _$; int 7g; int bardzo_długi_i_opisowy_identyfikator; int :b;

Przygotował: Jacek Sroka 16 Słowa kluczowe abstract continue for new switch assert 1.4 default if package synchronized boolean do goto private instanceof break double throw protected implements byte else import public throws this case enum 1.5 return transient catch extends int short interface char final try static void class finally long strictfp volatile const float native super while

Przygotował: Jacek Sroka 17 Konwencje Klasy i interfejsy camel case wielką literą Student, PracownikNaukowy Metody, atrybuty, zmienne camel case małą literą wiek, liczbadyplomów Stałe MAX_LICZBA_NIEZALICZEŃ JavaBeans public int getwiek() public void setwiek(int) public boolean iswieczorowy() atrybuty mogą mieć inne nazwy lub może ich nie być

Przygotował: Jacek Sroka 18 Typy 8+1 typów podstawowych Obiekty wskazywane przez referencję (16 bajtów obiekt, 8 bajtów referencja, 8 bajtów klasy wewnętrzne) Dla typów podstawowych są klasy opakowujące Wartości typów podstawowych przechowywane są na stosie, obiekty na stercie Tablice są obiektami (24 bajty) Przy adresacji 64 bitowej zaokrąglamy do 8 bajtów

Przygotował: Jacek Sroka 19 Typy Każda zmienna, atrybut, parametr ma zadeklarowany typ Kompilator sprawdza czy typy wyrażeń się zgadzają Typy pierwotne boolean byte, short, int, long, char float, double Typy referencyjne Klasy Interfejsy Tablice Obiekty = egzemplarze klas lub tablice

Przygotował: Jacek Sroka 20 Typy podstawowe

Przygotował: Jacek Sroka 21 Pamięć przykład public class Test { private int count; private Test innytest; private int[] sz; } //16 bajtów obiekt //4 bajty integer //8 bajtów referencja + ew. Test //8 bajtów referencja + ew. 24 tablica i 4*dł //+ew. uzupełnienie do wielokrotności 64bitów

Przygotował: Jacek Sroka 22 Zmienne zmienne klasowe zmienne egzemplarzowe zmienne lokalne elementy tablic (te zmienne są anonimowe) parametry metod parametry konstruktorów parametry obsługi wyjątków Zmienne lokalne trzeba samemu zainicjować przed użyciem! Maszyna wirtualna operuje wartościami int oraz double byte b = 1b; byte b = 1B; byte b = (byte) 1;

Przygotował: Jacek Sroka 23 Wartości domyślne

Przygotował: Jacek Sroka 24 Literały liczby całkowite (np. 13 czy -2627) dziesiętne, szesnastkowe (0xC) lub ósemkowe (np. 015) od Java 7 również binarne (0b00100001 lub 0B00100001) od Javy 7 możliwy czytelniejszy zapis 11_555_555 lub 0xCAFE_BABE liczby rzeczywiste (np. 1.0 czy -4.9e12) mogą być dziesiętne, szesnastkowe lub binarne np. 0Xf.aP1F; // (15 + 10/16) * 2^1 = 31.25 //szesnastkowo p zamiast e literały logiczne false i true literały znakowe (np. 'a', '\n' czy '\u004e') to 16bitowe liczby bez znaku literały napisowe (np. "Ala ma kota") obiekt String a nie typ pierwotny literały tablicowe literał null

Przygotował: Jacek Sroka 25 Operatory (i priorytety) Postfix: expr++ expr-- Unary: ++expr --expr +expr -expr ~! Multiplicative * / % Additive + - Shift << >> >>> //dla >> uzupełniamy zgodnie ze znakiem Relational < > <= >= instanceof Equality ==!= Bitwise AND & bitwise exclusive OR ^ bitwise inclusive OR Logical AND && Logical OR Ternary? : Assignment = += -= *= /= %= &= ^= = <<= >>= >>>=

Przygotował: Jacek Sroka 26 Porównania przykład class GuessAnimal { public static void main(string[] args) { String animal = "unknown"; int weight = 700; char sex = 'm'; double colorwavelength = 1.630; if (weight >= 500) { animal = "elephant"; } if (colorwavelength > 1.621) { animal = "gray " + animal; } if (sex <= 'f') { animal = "famale " + animal; } //kody Unicode System.out.println("The animal is a " + animal); } } The animal is a gray elephant

Przygotował: Jacek Sroka 27 Porównywanie Porównywać można liczby znaki wartości logiczne referencje "Ala" == "Ala" //to akurat nie jest takie oczywiste "Ala".equals("Ala"); Uwaga dla programistów C int x = 1; if (x = 0) {} //nie skompiluje się Jednak boolean b = false; if (b = true) { System.out.println("To się wypisze!!!"); }

Przygotował: Jacek Sroka 28 Jeszcze trochę priorytetów Jak wyliczy się? x *= 2 + 5; x = (x*2) + 5; //mnożenie ponad dodawanie x = x * (2+5); //nawias po prawej stronie

Przygotował: Jacek Sroka 29 Jeszcze trochę priorytetów Jak wyliczy się? x *= 2 + 5; x = (x*2) + 5; //mnożenie ponad dodawanie x = x * (2+5); //nawias po prawej stronie A jak wyliczy się? x = y++ + ++x/z;

Przygotował: Jacek Sroka 30 Ćwiczenia ćwiczenie: spróbujmy wypisać referencję (co zrobić żeby działało?) int x, y, z; z = 3; x = y = z; "Ala"+1+2+3; String s = "Ala"; s += 1; s += 2; s += 3; ""+1+2+3;

Przygotował: Jacek Sroka 31 Instrukcje c.d. instrukcja asercji assert i>0; assert i>=0: "i (" + i + ") mniejsze od zera"; instrukcja wyboru (od Java 7 również dla napisów!) switch (i){ default: System.out.println("Wartość spoza zakresu"); break; // Tak, nie musi być ostatnia! case 1: case 2: System.out.println("Dodatnie"); break; case -1: case -2: System.out.println("Ujemne"); break; case 0: System.out.println("Zero"); break; }//etykiety określają jak zorganizować skoki w bytecodzie pętla dopóki while (i>0) i--; pętla wykonuj do i++; while ( i < 0 ); pętla dla (wersja podstawowa) for (int j = 0; j<tab.length; j++) tab[j] = 0; pętla dla (wersja rozszerzona) for (int elt: tab) System.out.print(elt+", ");

Przygotował: Jacek Sroka 32 Instrukcje instruckja pusta ; instrukcja deklaracji zmiennej lokalnej int j = 13; int[] tab = new int[10]; instrukcja etykietowana koniec: return 0; instrukcja wyrażeniowa i = 0; o.wypisz(i); instrukcja warunkowa if (i > 0) i--; if (i > j) max = i; else max = j;

Przygotował: Jacek Sroka 33 Instrukcje c.d. instrukcja break break; break dalej; instrukcja continue continue; continue dalej; instrukcja powrotu return; return 0; instrukcja zgłoszenia wyjątku throw new Wyjątek(); instrukcja synchronizująca (zagadnienia współbieżności pomijamy)

Przygotował: Jacek Sroka 34 Instrukcje c.d. instrukcja try try { i = j/k; } catch (Exception e) { System.out.println("Dzielenie przez zero"); } finally { System.out.println("Kończymy"); } instrukcja bloku (umożliwia deklarowanie zmiennych lokalnych, a także klas lokalnych), np. { int i = 1; i++; int j = i + 1; return i+j; }

Przygotował: Jacek Sroka 35 Tablice Tablice są obiektami wobec czego są przechowywane na stercie Referencję do tablicy deklarujemy podając typ przechowywanego elementu oraz dodając parę nawiasów kwadratowych po dowolnej stronie identyfikatora: int[] tab; int []tab; int tab[]; int tab []; (który sposób jest najbardziej czytelny?) int[] tab1, tab2; //dwie tablice int tab1[], tab2; //tablica i liczba Tablice mogą być wielowymiarowe: String[][] tabliczka[]; Podczas deklaracji referencji do tablicy nigdy nie podajemy jej rozmiaru! Rozmiar podajemy dopiero tworząc nowy obiekt: int[] tab = new int[5]; String[][] tabliczka = new String[3][5];

Przygotował: Jacek Sroka 36 Tablice c.d. Tablice wielowymiarowe są tak naprawdę tablicami tablic: String[][] tabliczka = new String[2][]; tabliczka[0] = new String[3]; tabliczka[1] = new String[5]; Literałów tablic wolno używać jedynie w miejscu deklaracji: int[] tab = {1, 2, 3,}; //ostatni "," jest opcjonalny String s = "ela"; String[] t = {"ala", "ola", s, new String("ula")}; String[][] tabliczka = {t, {"ala"}}; W pozostałej części kodu można używać tablic anonimowych: int[] tab; tab = new int[] {1, 2, 3,}; //nadal nie podajemy rozmiaru mojafunkcja(new int[] {1, 2, 3,});

Przygotował: Jacek Sroka 37 Tablice c.d. Tablice indeksujemy zaczynając od zera: tab[0] == 1; t[3].equals("ula"); tabliczka[1][4] == null; //jest automatyczna inicjalizacja //"][" nie można zastąpić "," (tabliczka[1,4]) Tablice mają atrybut length Próba odwołania się poza zakres dostępnych indeksów spowoduje wystąpienie wyjątku ArrayIndexOutOfBoundsException java.util.arrays equals() oraz deepequals() tostring() oraz deeptostring() kopiowanie wyszukiwanie binarne, sortowanie hashcode na podstawie zawartości

Przygotował: Jacek Sroka 38 Jak działa wyszukiwanie binarne? java.util.arrays.binarysearch() 1: public static int binarysearch(int[] a, int key) { 2: int low = 0; 3: int high = a.length - 1; 4: 5: while (low <= high) { 6: int mid = (low + high) / 2; 7: int midval = a[mid]; 8: 9: if (midval < key) 10: low = mid + 1; 11: else if (midval > key) 12: high = mid - 1; 13: else 14: return mid; // key found 15: } 16: return -(low + 1); // key not found. 17: }

Przygotował: Jacek Sroka 39 Jak działa wyszukiwanie binarne? java.util.arrays.binarysearch() 1: public static int binarysearch(int[] a, int key) { 2: int low = 0; 3: int high = a.length - 1; 4: 5: while (low <= high) { 6: int mid = (low + high) / 2; 7: int midval = a[mid]; 8: 9: if (midval < key) 10: low = mid + 1 11: else if (midval > key) 12: high = mid - 1; 13: else 14: return mid; // key found 15: } 16: return -(low + 1); // key not found. 17: } Jak powinno być: 6: int mid = low + ((high - low) / 2); 6: int mid = (low + high) >>> 1;

Przygotował: Jacek Sroka 40 Konstruktor Nazwa taka sama jak nazwa klasy (można przeciążać) Brak typu zwrotnego (nie ma sensu) Zadbajmy, żeby atrybuty osoby nie mogły mieć wartości null class Osoba { String imię; String nazwisko; Osoba(String imię, String nazwisko){ this.imię = imię; //niedozwolone dla metod static this.nazwisko = nazwisko; } } String getimię(){ return imię; } String getnazwisko(){ return nazwisko; } Domyślny konstruktor bezparametrowy Pierwszą operacją może być wywołanie innego konstr. ale bez cykli this(...); super(...);

Przygotował: Jacek Sroka 41 Tworzenie obiektów Każdy obiekt jest inicjalizowany przez wykonanie jakiegoś konstruktora Operator new //Po dodaniu konstr. z param. powoduje błąd kompilacji Osoba o = new Osoba(); //Poprawne Osoba o = new Osoba("Jan","Kowalski");

Przygotował: Jacek Sroka 42 Kapsułkowanie Kontrolowanie inicjalizacji nie wystarcza do zachowania spójności Co nam grozi? Osoba o = new Osoba("Jan","Kowalski"); // o.imię = null; o.nazwisko = null; Chcemy żeby obiekty były hermetycznymi kapsułkami