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



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

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie obiektowe

KOTLIN. Język programowania dla Androida

Programowanie w Internecie. Java

Scala - programowanie obiektowo-funkcyjne

Programowanie obiektowe - 1.

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

Kurs WWW. Paweł Rajba.

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

Aplikacje w środowisku Java

Programowanie obiektowe

Java Język programowania

Dziedziczenie. Tomasz Borzyszkowski

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

Dokumentacja do API Javy.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

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

Dziedziczenie. dr Jarosław Skaruz

Programowanie obiektowe

Programowanie obiektowe

.NET Klasy, obiekty. ciąg dalszy

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

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

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

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

Multimedia JAVA. Historia

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

Programowanie obiektowe

Programowanie w Javie - wykład 3

Polimorfizm. dr Jarosław Skaruz

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Definicje klas i obiektów. Tomasz Borzyszkowski

Podstawy Języka Java

1 Atrybuty i metody klasowe

Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy

Technologie i usługi internetowe cz. 2

Programowanie obiektowe

Programowanie obiektowe

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Polimorfizm a klasy generyczne w języku Java. Zdzisław Spławski 1

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Abstrakcyjny typ danych

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

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

Typy uogólnione. Programowanie obiektowe. Jacek Sroka na podstawie materiałów Janusza Jabłonowskiego. 8 kwietnia 2013

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Języki i techniki programowania Ćwiczenia 2

Podstawy Programowania Obiektowego

Definiowanie własnych klas

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

Język programowania Scala + aktorzy Akka

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

Materiały do zajęć VII

Pakiety i interfejsy. Tomasz Borzyszkowski

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

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe

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

Diagramy klas. dr Jarosław Skaruz

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

Wykład 6: Dziedziczenie

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

JAVA- wykład 2 Klasy

Programowanie obiektowe

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

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

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

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

10. Programowanie obiektowe w PHP5

Co jeszcze mogą nam dać adnotacje? Adam Warski

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie obiektowe i zdarzeniowe

Interfejsy i klasy wewnętrzne

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Platformy Programistyczne Podstawy języka Java

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

Wykład 4: Klasy i Metody

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe. Wprowadzenie

Przypomnienie o klasach i obiektach

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór

Szablony klas, zastosowanie szablonów w programach

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

Wykład 8: klasy cz. 4

Programowanie obiektowe

Programowanie obiektowe

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

Dawid Gierszewski Adam Hanasko

Programowanie obiektowe

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

Transkrypt:

Scala Obiektowo-funkcyjny język programowania Zbyszek Skowron 4 czerwca 2007

Wprowadzenie Scala jest obiektowo-funkcyjnym jezykiem programowania zaprojektowanym przez Martina Odersky'ego. Inne projekty Odersky'ego: - Pizza (Java + generyki, wsk. do funkcji, typy algebraiczne) - GJ (pierwsza wersja generyków Javy) - Generyki Javy - Funnel

Scala W Scali: wszystko jest obiektem, włącznie z: wartościami liczbowymi, funkcjami, istnieją pojęcia: klasy, cechy (ang. trait). Obiekty są tworzone jako instancje klas. Scala jest statycznie typowana. Może być używana zarówno w środowisku JRE jak i.net 3

scala.any scala.anyval (prymitywy) scala.nothing podtyp wszystkiego Hierarchia klas scala. ScalaObject (trait) scala. AnyRef (java.lang. Object) scala.null tylko null 4

Hierarchia klas cd. W Scali mamy pojedyncze dziedziczenie po klasach i wielodziedziczenie po cechach. Cechy (traits) to analogi interfejsów, tyle że mogą być częściowo zaimplementowane. Każda klasa napisana w Scali domyślnie zawiera cechę scala.scalaobject. Klasy Javy nie zawierają cechy scala.scalaobject. Klasy dziedziczące po scala.anyval są predefiniowane. Po scala.anyval nie można dziedziczyć. null jest tylko dla typów referencyjnych. 5

Domyślny import Program w Scali Obiekt singletonowy Punkt wejścia dla programu Konstrukcja obiektu Predef.println() val - wartość var - zmienna Klasa Application zawiera pustą metodę main() 6

Skróty notacyjne Implementacja: tablica Javy Obiekt singletonowy z metodą apply() Funkcja anonimowa 7

Część I Elementy obiektowe w Scali

Deklaracja pakietu Deklaracja klasy Główny konstruktor Dodatkowy konstruktor Nowa metoda (zwraca Unit) Przedefiniowanie metody z nadklasy Instrukcje w ciele klasy są wywoływane w czasie konstrukcji 9

Dziedziczenie Parametr konstruktora Parametry dostępne na zewnątrz jako wartość i zmienna Konstrukcja nadklasy Przeciążanie operatorów Parametry konstruktora wszędzie dostępne Wywołanie equals() 10

Przedefiniowywanie metod Covariant Return Type Contravariant Parameter Type - błąd Metody przeciążone 11

Cechy (traits, mixins) Deklaracja cechy (brak konstruktora) Metoda abstrakcyjna Metoda konkretna Dziedziczenie Wywołanie wmieszanej metody 12

Cechy - przykład Typ abstrakcyjny Cecha rozszerzająca klasę - brak konstruktora Konstruktor Typ konkretny Wywołanie wmieszanej metody Zmiksowanie klasy i cechy 13

Klasy abstrakcyjne i mixiny W klasach abstrakcyjnych mogą występować: metody abstrakcyjne, wartości abstrakcyjne, zmienne abstrakcyjne, typy abstrakcyjne. Cechy mogą dziedziczyć po cechach i po klasach: 14

Klasy zagnieżdżone Klasy zagnieżdżone są nieco inne niż w Javie: Typy g.node i h.node są różne Typy Graph#Node są takie same 15

Część II Typy sparametryzowane

Typy sparametryzowane W Scali można tworzyć typy sparametryzowane innymi typami. Podobnie można parametryzować metody. Parametry typowe giną po kompilacji. Dostępne mechanizmy: Scala [Derived <: Base] Java <Derived extends Base> [Base >: Derived] <Base super Derived> [+T] brak [-T] brak Oznaczenie pozycji w jakiej może występować typ: +kowariantnej, -kontrawariantnej Można to określić w miejscu użycia 17

Prosty przykład Typ parametryczny Metoda polimorficzna Typ ograniczony z obu stron 18

Określa sposób dziedziczenia Stos niemodyfikowalny Klasa anonimowa Stack[Derived] <: Stack[Base] 19

Klasy abstrakcyjne i generyczne Zawężenie typu abstrakcyjnego Zawężenie parametru typowego 20

Ręczne typowanie this'a Ręczne typowanie this'a...bo tu jest potrzebny t, a nie Comparable[t] 21

Ręczne typowanie this'a Ręczne typowanie this'a...bo tu jest potrzebny Node, a nie NodeImpl 22

Część III Elementy funkcyjne w Scali

Funkcje w Scali W Scali wszystkie funkcje są obiektami. Typ funkcyjny: (T1,..., Tn) => R Czyli inaczej: Typ funkcyjny jest kowariantny ze względu na typ wyniku i kontrawariantny ze względu na typy parametrów: 24

Parametry funkcji Funkcje mogą mieć wieloczłonowe listy parametrów i być częściowo aplikowane: Częściowa aplikacja funkcji W Scali istnieje też przekazywanie parametrów przez nazwę: Przekazanie przez nazwę Wyliczane przy każdym użyciu 25

Funkcje wyższego rzędu Funkcja wyższego rzędu Automatyczne rzutowanie z metody na funkcję 26

Funkcje anonimowe W Scali istnieje kilka sposobów na zdefiniowanie funkcji anonimowej: 27

Domknięcia Domknięcie zwraca wartość ostatniego wyrażenia Typ: => Int Ten return kończy funkcję f() Wywołanie rzuci wyjątek 28

Typy algebraiczne W Scali istnieje skrócona notacja dla tworzenia klas wariantowych (case classes): można tworzyć bez new: a = Some(5) domyślnie dodawany modyfikator val dla parametrów konstruktora domyślnie przedefiniowywane metody equals() i hashcode() - porównanie strukturalne tostring() zwraca napis Klasa(parametry) 29

Typy algebraiczne: przykład Klasy jako wzorce Przypisanie na wzorzec 30

Dopasowanie wzorców Konstruktor pary Predykat Sprawdzanie wartości, struktury, typu... 31

Ekstraktory Sposób dopasowania wzorca do obiektu można określić pisząc ekstraktor: unapply() Ekstraktor, zwraca Option[A] Stworzenie obiektu Dopasowanie obiektu Istnieje również możliwość dopasowywania kolekcji poprzez: unapplyseq() 32

Część IV Inne ciekawe własności

Parametry domyślne Funkcja w Scali może mieć parametry domyślne. Kandydatami na uzupełnienie parametrów domyślnych są obiekty domyślne, dostępne bezpośrednio w bieżącym zasięgu. Ostatni człon listy parametrów może przyjmować wartości domyślne Domyślny argument: id() 34

Domyślne konwersje Scala pozwala na definiowanie domyślnych konwersji (views) dla typów. implicit S => T Domyślna konwersja 35

Pętle for Pętle for są tylko lukrem syntaktycznym do wywołań metod map(), flatmap(), filter() i foreach(). 36

Pakiety Pakiety w Scali nie są tożsame z katalogami. W jednym pliku może być zdefiniowanych wiele klas. Importy lokalne Zmiana nazwy importowanej klasy 37

Kontrola dostępu Kontrola dostępu do elementów klas w Scali jest dużo bardziej rozbudowana niż w Javie: private - klasowy private private[this] - obiektowy private private[cls] - dla klasy Cls i singletona Cls protected, protected[this], protected[cls] Kwalifikatory: final - dla metod i klas sealed - dla klas (jak final, ale można dziedziczyć w tym samym pliku źródłowym) 38

Współpraca z JVM Klasy Scali są konwertowane na klasy Javy. Cechy są zamieniane na interfejsy. Metody, o ile to możliwe, zachowują swoje nazwy. String przechodzi na java.lang.string. Tablice są implementowane jako tablice Javy. 39

Wtyczki Wtyczka dodająca obsługę Scali do Eclipse'a: ma podświetlanie składni (wolne...), nie wspomaga współpracy z Javą, nie ma podpowiadania kodu, ma błędy. Wtyczka do IntelliJ IDEA nie jest lepsza: mimo że podpowiada kod, to nie instaluje się na najnowszej IDEI. 40

Koniec Strona domowa Scali, dystrybucje i dokumentacja: http://www.scala-lang.org