Programowanie obiektowe

Podobne dokumenty
Programowanie obiektowe

Podstawy i języki programowania

Programowanie obiektowe

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

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

KOTLIN. Język programowania dla Androida

Programowanie obiektowe

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

Platformy Programistyczne Podstawy języka Java

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Podstawy Programowania Obiektowego

Programowanie obiektowe

Język programowania Scala + aktorzy Akka

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

Scala - programowanie obiektowo-funkcyjne

Współbieżność w środowisku Java

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Paradygmaty programowania

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

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

Definicje klas i obiektów. Tomasz Borzyszkowski

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

Definiowanie własnych klas

Enkapsulacja, dziedziczenie, polimorfizm

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

Szablony funkcji i klas (templates)

Programowanie obiektowe

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

Aplikacje w środowisku Java

Programowanie obiektowe

Technologie i usługi internetowe cz. 2

Metody Metody, parametry, zwracanie wartości

Scala. Obiektowo-funkcyjny język programowania. Zbyszek Skowron

Programowanie w Internecie. Java

Programowanie obiektowe

Microsoft IT Academy kurs programowania

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

Programowanie obiektowe

Wykład 4: Klasy i Metody

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe - 1.

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

Diagramy klas. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Programowanie w języku C++ Podstawowe paradygmaty programowania

Podstawy Języka Java

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Wstęp. Ale po co? Implementacja

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

Programowanie obiektowe

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

Programowanie obiektowe

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe

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

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

Wprowadzenie do języka Java

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

Kurs programowania. Wykład 9. Wojciech Macyna

1 Atrybuty i metody klasowe

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

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

Programowanie obiektowe

Modelowanie obiektowe

Podstawy i języki programowania

Java jako język programowania

Projektowanie obiektowe. Roman Simiński Polimorfizm

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

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Wstęp do Programowania 2

Wywoływanie metod zdalnych

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

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

Programowanie w Javie - wykład 3

Podstawy i języki programowania

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

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

Podstawy i języki programowania

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

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe

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

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Wstęp do programowania

Wstęp do ruby dla programistów javy

Dziedziczenie. dr Jarosław Skaruz

Przypomnienie o klasach i obiektach

Dokumentacja do API Javy.

Wykład 7: Pakiety i Interfejsy

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

Transkrypt:

Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Informacje wstępne Opis Scala jest językiem programowania łączącym cechy języków funkcyjnych i obiektowych. Martin Odersky rozpoczął prace nad jego stworzeniem w 2001 roku, by dwa lata później wydać go do wewnętrznych zastosowań. Język upubliczniony został w styczniu 2004 roku na platformie Javy oraz.net (wsparcie dla niego zostało zakończone w 2012 roku). Druga wersja Scali pojawiła się w marcu 2006 roku (najnowsza wersja: 2.12.2). 2 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Scala vs Java 3 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Charakterystyka Scali 1 Łączy cechy języków funkcyjnych i obiektowych. 2 Jest silnie i statycznie typowany. 3 Ma mechanizm inferencji typów. 4 Działa na JVM. 5 Może wykonywać kod Javy. 6 Wszystkie typy są obiektami. 7 Umożliwia tworzenie funkcji zagnieżdżonych. 8 Funkcje są obiektami.. 4 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Kompilacja kodu 5 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Popularność Scali 6 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Wyrażenia Słowa kluczowe W Scali występują trzy słowa kluczowe umożliwiają definiowanie wyrażenia - def, var oraz val. Słowo def pozwala na zdefiniowanie wyrażenia, którego wartość będzie wyliczana zawsze w chwili odwołania się do tego wyrażenia. Przy pomocy słowa var można zdefiniować wyrażenie, którego wartość może podlegać zmianom (ang. mutable), a słowo kluczowe val pozwala zdefiniować wartości, które nie podlegają zmianom (ang. immutable). 7 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Deklaracja stałej i zmiennej [ lazy ] val Nazwa = wartość [ lazy ] val Nazwa : typ = wartość [ lazy ] val Nazwa = wartość : typ var nazwa = wartość var nazwa : typ = wartość var nazwa = wartość : typ 8 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

lazy val, a val val X = { println ("x"); 15 // x lazy val Y = { println ("y"); X+1 println ("x to: " + X); // x to: 15 println ("y to: " + Y) // y y to: 16 9 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Definicja klasycznej funkcji def nazwa ( par :typ,...) : typ = { ciało Przykład def inkrementuj ( x: Int ) : Int = { x + 1 val wynik = inkrementujwartosc (2) W przypadku nieumieszczenia słowa kluczowego return zwrócona zostanie wartość ostatniego wyrażenia (dla przykładu x + 1). Podanie zwracanego typu jest opcjonalne. Odpowiednikiem Javowego void jest Unit. 10 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Funkcje wyższego rzędu Opis Funkcja wyższego rzędu to funkcja, która zwraca lub przyjmuje jako argument inne funkcje. def moneytransfer ( amount : Double, provider : Double => Double ): Double ={ amount + 10 + provider ( amount ) def prov ( money : Double ) = money * 0.05 println ( moneytransfer (100, prov )) 11 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Funkcje zagnieżdżone Opis Funkcja zagnieżdżona (w Scali nazywana lokalną) to funkcja, która znajduje się w innej funkcji. def factorial (i: Int ): Int = { def fact (i: Int, acc : Int ): Int = { if (i <= 1) acc else fact (i - 1, i * acc ) fact (i, 1) 12 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Rozwijanie funkcji Opis Rozwijanie funkcji to operacja występująca w funkcyjnych językach programowania polegająca na przekształceniu funkcji, która pobiera parę argumentów i zwraca wynik w funkcję, która po pobraniu argumentu zwraca funkcję, która pobiera argument i zwraca wynik. def add (x:int, y: Int ) = x + y def addcurried (x: Int ) = (y: Int ) => x + y add (1, 2) // 3 addcurried (1) (2) // 3 13 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Klasy w Scali - pełny zapis class Nazwa ( parametr : typ,...) { var nazwapola : typ = parametr def metoda ( nowawartosc : typ ) { nazwapola = nowawartosc ; 14 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Klasy w Scali - skrócony zapis class Nazwa ( var / val nazwapola : typ,...) { def metoda ( nowawartosc : typ ) { nazwapola = nowawartosc ; 15 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Klasy w Scali - przykład dla pełnego zapisu class Punkt ( xs : Int, ys : Int ) { var x = xs var y = ys def ustawwartosci ( xs: Int, ys: Int ) { x = xs y = ys val punkt = new Punkt (5,3) punkt. ustawwartosci (4,3) println ( punkt.x) 16 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Klasy w Scali - przykład dla krótkiego zapisu class Punkt ( var x : Int, var y : Int ) { def ustawwartosci ( xs: Int, ys: Int ) { x = xs y = ys val punkt = new Punkt (5,3) punkt. ustawwartosci (4,3) println ( punkt.x) 17 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Efekt kompilacji class Cat ( val catid :Int, var name : String ) 18 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Wniosek 19 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Singleton - (anty)wzorzec Opis Singleton zapewnia występowanie maksymalnie jednej instancji danej klasy (tworzenie obiektu następuje przy pierwszej próbie użycia) oraz umożliwia globalny dostęp do stworzonego obiektu. Zazwyczaj wykorzystywany jest do przechowywania konfiguracji aplikacji oraz utrzymywania połączenia z bazą danych. Przy implementacji należy pamiętać o środowisku wielowątkowym i trudnościach z testowaniem. 20 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Singleton - schemat działania 21 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Singleton w Javie public class Conf { private static final Conf INS = new Conf (); private Conf () { public static Conf getinstance () { return INS ; 22 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Singleton w Javie z lazy loading public class Conf { private static Conf ins = null ; private Conf () { public static Conf getinstance () { if(ins == null ) { ins = new Conf (); return ins ; 23 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Singleton w Javie z lazy loading 2 public class Conf { private static Conf ins = null ; private Conf () { public static Conf getinstance () { if(ins == null ) { synchronized ( Conf. class ) { ins = new Conf (); return ins ; 24 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Singleton w Scali object Conf 25 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Typizacja Silna Silna typizacja to system typów, w którym każde wyrażenie ma ściśle ustalony typ i nie można go używać w kontekście przeznaczonym dla innych typów. Scala się nią cechuje. Słaba Słaba typizacja to system typów, w którym typ wyrażenia może być zmieniony, jeśli wymaga tego kontekst. val liczba = 1; if ("1" == liczba ) { // comparing values of types Int and String using = = will always yield false 26 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Inferencja Opis Inferencja typów to technika używana w językach programowania, która zwalnia programistę z obowiązku pisania typów i przerzuca obowiązek identyfikacji typów na kompilator. val napis = " Ala ma kota w głowie " print ( napis. getclass. getsimplename ) // String 27 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Funkcja anonimowa Opis Funkcja anonimowa jest definicją funkcji, która nie jest powiązana z żadnym identyfikatorem. Jeśli funkcja jest używana tylko jeden raz lub ograniczoną liczbę razy, to użycie funkcji anonimowej może być wygodniejsze niż użycie funkcji posiadającej identyfikator. (x: Int ) => x + 1 Przykład użycia val wynik = (x: Int ) => x + 1 print ( wynik (5) ) 28 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

val, a def class A(a: Int ) { val x = { println ("x"); a def y = { println ("y"); a val a = new A (1) // x println (a.x) // 1 println (a.x) // 1 println (a.y) // y 1 println (a.y) // y 1 Zapis def x = e nie spowoduje obliczenia e (zostanie ono wyznaczone każdorazowo w momencie użycia x). Natomiast val x = e skutkuje natychmiastowym obliczeniem e i przypisaniem wartości do x. 29 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Obliczenie silni w Scali print (" Liczba : ") val input = scala.io. StdIn. readint () print (" Silnia z liczby " + input + " to: " + factorial ( input )) def factorial (n: BigInt ): BigInt = { if(n == 0 n == 1) 1 else n * factorial ( n - 1) 30 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Dla nieprzekonanych 31 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe

Dziękuję za uwagę 32 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe