Podstawy otwartych języków programowania Przechowywanie danych

Podobne dokumenty
Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego Łódź. Java podstawy języka, wykład 4 1

Programowanie Obiektowe (Java)

java.util.* :Kolekcje Tomasz Borzyszkowski

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Kurs programowania. Wykład 9. Wojciech Macyna

Kolekcje mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie w języku Java. Kolekcje

Kolekcje. Na podstawie:

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

Kolekcja (kontener) to po prostu obiekt, który grupuje wiele elementów w jeden twór.

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

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

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

Kolekcje - pakiet Java Collections Framework

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Platformy Programistyczne Podstawy języka Java

Podstawowe części projektu w Javie

KOTLIN. Język programowania dla Androida

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

Wykład 2: Podstawy Języka

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Java Język programowania

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

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

Programowanie obiektowe

Programowanie obiektowe

Kolekcje - pakiet Java Collections Framework

Wprowadzenie do języka Java

Programowanie obiektowe

Lista, Stos, Kolejka, Tablica Asocjacyjna

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

import java.util.*; public class ListExample { public static void main(string args[]) { List<String> lista1= new ArrayList<String> ();

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Technologie i usługi internetowe cz. 2

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Java Collections Framework

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

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

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

Klasy i obiekty cz II

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

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

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

Podstawy programowania. Podstawy C# Tablice

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

Dawid Gierszewski Adam Hanasko

Tworzenie aplikacji w języku Java

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe

Programowanie obiektowe i język Java

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

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

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

Programowanie w środowiskach graficznych. Wykład 3 Język C#

Microsoft IT Academy kurs programowania

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Kolekcje w Javie cz. 1

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Podstawy programowania obiektowego

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

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

Comparable<Klasa_uzytkownika>

Klasy abstrakcyjne, interfejsy i polimorfizm

GUI - projektowanie interfejsów cz. II

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

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

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

Programowanie obiektowe

Programowanie obiektowe

Programowanie, algorytmy i struktury danych

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Programowanie w Internecie. Java

SZKOLENIE. Programowanie w języku Java. tel.: ; fax: ,

Wykład 4. Tablice. Pliki

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Programowanie i struktury danych

UML a kod. C++, Java i C#

Java SE Laboratorium nr 7. Temat: Kolekcje

Szablony funkcji i klas (templates)

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

Programowanie obiektowe

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

Programowanie obiektowe

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Programowanie w Javie wykład 9 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące

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

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

Model pamięci. Rafał Skinderowicz

Dziedziczenie. dr Jarosław Skaruz

Podstawy Języka Java

Programowanie obiektowe

Redis, skrypty w języku Lua

Enkapsulacja, dziedziczenie, polimorfizm

Transkrypt:

Podstawy otwartych języków programowania Przechowywanie danych Wiktor Wandachowicz

Sposoby przechowywania danych Typy podstawowe Pojedyncze obiekty Tablice obiektów i tablice typów podstawowych jednowymiarowe wielowymiarowe Kolekcje Inne (serializacja, pliki, zewnętrzne źródła danych)

Typy podstawowe boolean char byte short int long float double Tablice Napisy (String) Boolean Character Byte Short Integer Long Float Double Równoważne im obiektowe typy opakowujące (ang. wrapper types)

Obiekty Do obiektów odwołujemy się przez uchwyty. Uchwyty mają znaczenie dla maszyny wirtualnej, właściwe położenie danych obiektu w pamięci może się zmieniać. Uchwyty obiektów, które są gubione w programie i nie są już więcej dostępne są zaznaczane do usunięcia przez mechanizm odśmiecania pamięci (ang. garbage collection). Odśmiecanie pamięci następuje automatycznie.

Tablice Deklaracje tablic: int[] tablica1; int tablica2[]; // składnia C/C++, nie zalecane Każdą tablicę przed użyciem trzeba utworzyć lub zainicjalizować: char[] symbole = new char[5]; String napisy[] = { "Hello", "world", "!!!" ; Każda tablica ma stałe pole length, które przechowuje ilość jej elementów.

Tablice wielowymiarowe Deklaracje: double[][] wekt3d = new double[3][3]; Używanie z uwzględnieniem pola length: for (int i = 0; i < wekt3d.length; i++) { for (int j = 0; j < wekt3d[i].length; j++) { System.out.println("wekt3D[" + i + "]" + "[" + j + "] = " + wekt3d[i][j]);

Kolekcje Cechy kolekcji Przegląd interfejsów i klas kolekcji Przykłady użycia Iteratory

Cechy kolekcji Kolekcje w Javie przechowują grupy obiektów, wykorzystując gotowe algorytmy składowania danych Siła kolekcji leży w tym, że są zamienne mają taki sam interfejs, a różnią się implementacją Są dwa podstawowe interfejsy: Collection i Map, inne interfejsy są ich rozszerzeniem Platforma Java zawiera różne implementacje tych samych interfejsów Każdą kolekcję obiektów można przejść z użyciem iteratora (uniwersalnie), lub w przewidziany tylko dla niej sposób (specyficznie)

Interfejsy kolekcji Kolekcja (Collection) reprezentuje grupę obiektów (elementów) Zbiór (Set) jest kolekcją która nie może zawierać powtórzeń elementów Lista (List) jest kolekcją z ustalonym porządkiem (kolejnością) elementów, może zawierać powtórzenia Odwzorowanie (Map) przyporządkowuje do danych kluczy wartości, klucze nie mogą się powtarzać

Cechy kolekcji (Java 1.4) Kolekcje znajdują się w pakiecie java.util Kolekcje przechowują referencje do Object, nie są więc czułe na typ danych (gubią informację o typie) Przy odczycie elementów trzeba wykonywać rzutowanie do odpowiedniego typu danych W jednej kolekcji mogą być obiekty różnych klas (ponieważ wszystkie są zgodne z Object) Używając typów opakowujących (ang. wrapper types) można umieszczać w kolekcjach m.in. liczby i pojedyncze litery Używając metody size() można odczytać aktualną ilość elementów w kolekcji

Użycie kolekcji (bez iteratorów) List zakupy = new ArrayList(); zakupy.add(new Zakup("Mleko")); zakupy.add(new Zakup("Rogalik"); zakupy.add(new Zakup("Kakao")); zakupy.add(new Zakup("Miód")); rozszerzalna tablica for (int i = 0; i < zakupy.size(); i++) { System.out.println(i + ". " + zakupy.get(i)); Map ceny = new HashMap(); ceny.put("mleko", new Double(1.69)); ceny.put("rogalik", new Double(0.45)); odwzorowanie (mapa) System.out.println("Cena rogalika: " + ceny.get("rogalik")); Object[] produkty = ceny.keyset().toarray(); for (int j = 0; j < produkty.length; j++) { System.out.println( produkty[j]+" : " + ceny.get(produkty[j]));

Klasy kolekcji na platformie Java Implementacje Tablica mieszająca Rozszerzalna tablica Zbalansowane drzewo Lista wiązana Set HashSet TreeSet Interfejsy List ArrayList LinkedList Map HashMap TreeMap

Klasy kolekcji (c.d.) Najprostszą klasą kolekcji jest ArrayList (jest to lista zaimplementowana w postaci tablicy). Zapewnia ona szybki dostęp swobodny do elementów i potrafi automatycznie powiększać swój rozmiar. W starej bibliotece kolekcji jej odpowiednikiem jest Vector. Większą funkcjonalność posiada klasa LinkedList (jest to lista o szybkim dostępie sekwencyjnym do elementów). Także automatycznie powiększa swój rozmiar. Jest jednak stosunkowo powolna przy dostępie swobodnym. Posiada bardziej uniwersalny zestaw metod (np. addfirst() / addlast()).

Przegląd metod kolekcji Wybrane metody interfejsu Collection: dodanie elementów metoda add() odczyt ilości elementów metoda size() pobranie elementu metoda get() ustawienie elementu opcjonalna metoda set() usunięcie elementu opcjonalna metoda remove() zwrócenie tablicy z elementami kolekcji metoda toarray() Wybrane metody interfejsu Map: dołączenie elementu do klucza metoda put() odczytanie elementu spod klucza metoda get() odczyt zbioru wszystkich kluczy metoda keyset() test czy klucz jest w kolekcji metoda containskey() test czy element jest w kolekcji metoda containsvalue()

Iteratory Iterator jest obiektem umożliwiającym przemieszczanie się po elementach kolekcji, niezależnie od jej struktury Obiekt iteratora dla kolekcji uzyskuje się wywołując jej metodę iterator(). Jest on gotów do zwrócenia pierwszego elementu ciągu. Dla uzyskania następnego elementu kolekcji należy wywołać metodę next() iteratora. Można sprawdzić, czy są jeszcze jakieś elementy w ciągu wywołując metodę hasnext() Można usunąć ostatni zwrócony przez iterator element, stosując metodę remove()

Przykład użycia iteratora class Krzeslo { /*... */ Kod działa równie dobrze, jeśli jest: List sala = new LinkedList(); List sala = new ArrayList(); for (int i = 1; i <= 20; i++) { sala.add(new Krzesło("nr. " + i)); odczyt iteratora Iterator it = sala.iterator(); while (it.hasnext()) { Krzesło k = (Krzesło) it.next(); System.out.println(k.odczytajNumer()); czy są jeszcze elementy? przywrócenie typu (rzutowanie) Użycie iteratorów pozwala korzystać z kolekcji w taki sposób, że łatwo wymienić jej implementację na inną

Dwa sposoby iterowania // z użyciem pętli while problemy przy cut & paste // // 1) Nie można mieć dwóch zmiennych w tym samym zakresie // o takiej samej nazwie // 2) Zmiana nazwy iteratora w trzech miejscach // 3) Iterator wyczerpany lub konieczność jego reinicjalizacji Iterator it = sala.iterator(); while (it.hasnext()) { Krzesło k = (Krzesło) it.next(); System.out.println(k.odczytajNumer()); // z użyciem pętli for bez problemów for (Iterator it = sala.iterator(); it.hasnext(); ) { Krzesło k = (Krzesło) it.next(); System.out.println(k.odczytajNumer());

Kolekcje w Javie 5 i 6 W najnowszej wersji Javy zostały dodane rozszerzenia języka (m.in. szablony, rozszerzona pętla for), dzięki którym użycie kolekcji jest łatwiejsze i mniej podatne na błędy. Kolekcje zyskały możliwość przechowywania obiektów ściśle określonego typu. Iteracja po wszystkich obiektach kolekcji jest o wiele krótsza w zapisie (brak rzutowań, mniejsza ilość błędów). Możliwa jest także iteracja po elementach tablic korzystając ze składni rozszerzonej pętli for.

Kolekcje w Javie 5 i 6 (c.d.) Typy uogólnione (ang. generic types) zostały wprowadzone w Javie zwłaszcza po to, aby już na etapie kompilacji pozbyć się problemu dodawania do kolekcji różnego rodzaju danych. Kolekcje są zgodne binarnie w dół, można więc m.in. korzystać w skompilowanym kodzie (biblioteki) z nowych kolekcji. Odbywa się to przez mechanizm wymazywania (ang. erasure) magię kompilatora.

Cechy kolekcji (Java 5 i 6) Kolekcje znajdują się w pakiecie java.util Kolekcje przechowują referencje do wskazanego typu danych, przy użyciu typów uogólnionych W jednej kolekcji mogą być obiekty jedynie wskazanej klasy oraz jej klas pochodnych Przy odczycie elementów odtwarzany jest odpowiedni typ danych (nie jest potrzebne rzutowanie) Liczby i pojedyncze litery można umieszczać wprost w kolekcjach przez użycie mechanizmu autoboxing Używając metody size() można odczytać aktualną ilość elementów w kolekcji

Kolekcje w nowym stylu public class Klasa { private String napis; public Klasa(String parametr) { this.napis = parametr; public String tostring() { return "Klasa(" + napis + ")"; // kolekcja uwzględniająca typ danych List<Klasa> dane = new LinkedList<Klasa>(); for (int i = 1; i <= 7; i++) { dane.add(new Klasa("obiekt_" + i)); // iterator uwzględniający typ danych Iterator<Klasa> it = dane.iterator(); while (it.hasnext()) { Klasa obiekt = it.next(); // nie ma rzutowania! System.out.println(obiekt);

Trzy sposoby iterowania // z użyciem pętli while problemy przy cut & paste Iterator<Klasa> it = dane.iterator(); while (it.hasnext()) { Klasa obiekt = it.next(); System.out.println(obiekt); // z użyciem pętli for bez problemów for (Iterator<Klasa> it = dane.iterator(); it.hasnext(); ) { Klasa obiekt = it.next(); System.out.println(obiekt); // z użyciem rozszerzonej pętli for // (przykład równoważny poprzedniej pętli) for (Klasa obiekt : dane) { System.out.println(obiekt);

Stare kolekcje w nowym wydaniu // RÓŻNE TYPY DANYCH W JEDNEJ KOLEKCJI // Kolekcja przechowująca elementy typu Object List tradycyjna = new Vector(); // operacja poprawna tradycyjna.add(new Integer(5)); // autoboxing tradycyjna.add(6); // Poniższy kod kompiluje się, ale pojawia się błąd // w trakcie działania programu /* tradycyjna.add(new Klasa("obiekt")); */ // Nowy sposób iterowania po starej kolekcji for (Object o : tradycyjna) { // unboxing: Object -> Integer -> int int x = (Integer) o; System.out.println(o.getClass().getName() + " " + x);

Odwzorowania (mapy) w nowym stylu // AUTOBOXING I UNBOXING W PRAKTYCE // odwzorowanie uwzględniające wskazany typ klucza i wartości Map<String,Double> ceny = new HashMap<String,Double>(); ceny.put("mleko", new Double(1.69)); // autoboxing: automatyczna konwersja double -> Double ceny.put("rogalik", 0.45); System.out.println("Ceny produktów:"); for (String produkt : ceny.keyset()) { System.out.println(produkt + "\t\t" + ceny.get(produkt)); System.out.print("Zakup po jednej sztuce to wydatek: "); double suma = 0.0; // też dobrze dla: Double suma = 0.0; for (String produkt : ceny.keyset()) { // unboxing Double -> double przed sumowaniem suma += ceny.get(produkt); System.out.println(suma);