ZAAWANSOWANE PROGRAMOWANIE W JĘZYKU SKRYPTOWYM

Podobne dokumenty
MOBILNE APLIKACJE HYBRYDOWE

Programowanie obiektowe

Programowanie obiektowe

Kurs WWW. Paweł Rajba.

Aplikacje w środowisku Java

Technologie i usługi internetowe cz. 2

Programowanie obiektowe

PHP 5 język obiektowy

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Dokumentacja do API Javy.

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

Programowanie obiektowe - 1.

Programowanie obiektowe

Klasy i obiekty cz II

Enkapsulacja, dziedziczenie, polimorfizm

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

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

Programowanie obiektowe

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

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

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

Tytuł szkolenia: Angular 4 - budowanie nowoczesnych i wydajnych aplikacji przeglądarkowych

Polimorfizm. dr Jarosław Skaruz

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

O sobie. Adam Kowalski. Absolwent informatyki Uniwersytetu Wrocławskiego Full-stack Developer w firmie Synergy Codes.

Programowanie obiektowe

WYKŁAD 1 ANGULARJS CZĘŚĆ 1

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Dziedziczenie. Tomasz Borzyszkowski

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

10. Programowanie obiektowe w PHP5

Tworzenie aplikacji Web Alicja Zwiewka. Page 1

TEMAT : KLASY DZIEDZICZENIE

Materiały do zajęć VII

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Podstawy Języka Java

Wykład 4: Klasy i Metody

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Technologie obiektowe

Podstawy programowania III

REFERAT O PRACY DYPLOMOWEJ

Dziedziczenie. dr Jarosław Skaruz

Język programowania. Andrzej Bobyk

JAVA NA SERWERZE SPRING. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

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

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

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

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

Aplikacje w środowisku Java

Wykład 5 Okna MDI i SDI, dziedziczenie

CMS, CRM, sklepy internetowe, aplikacje Web

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Wykład 7: Pakiety i Interfejsy

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

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

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Multimedia JAVA. Historia

Wywoływanie metod zdalnych

PHP: bazy danych, SQL, AJAX i JSON

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Programowanie obiektowe. Obiekt Klasa Składnia klasy: Interfejsy Składnia interfejsu: Metody Składnia instrukcji Sub: Składnia instrukcji function:

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Java Język programowania

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

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

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Programowanie obiektowe

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Zaawansowane programowanie w języku C++ Klasy w C++

Klasy abstrakcyjne i interfejsy

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

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie do projektu QualitySpy

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

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

Aplikacje SPA, Angular, TypeScript. dr hab. inż. Marek Wojciechowski

.NET Klasy, obiekty. ciąg dalszy

RESPONSYWNE INTERFEJSY. Klasy urządzeń klienckich Responsywne style CSS. Waldemar Korłub

Podstawy programowania. Wprowadzenie

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Programowanie obiektowe i zdarzeniowe

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

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

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Transkrypt:

ZAAWANSOWANE PROGRAMOWANIE W JĘZYKU SKRYPTOWYM Waldemar Korłub Aplikacje i Usługi Internetowe KASK ETI Politechnika Gdańska

Agenda 2 Zaawansowane programowanie w przeglądarce Bogate aplikacje klienckie Modelowanie przepływu sterowania: frameworki MVC w przeglądarce Widoki aplikacji jako projekcje szablonów Model danych Kontrolery reagujące na akcje użytkownika Wiązanie danych Wstrzykiwanie zależności Komunikacja z aplikację serwerową

3 Rynek aplikacji

Aplikacje desktopowe 4 Od lat na rynku systemów desktopowych aplikacje natywne tracą na znaczeniu Na rzecz WWW! Dlaczego strona internetowa jest lepsza od natywnej aplikacji okienkowej?

Aplikacje desktopowe 5 Dlaczego strona internetowa jest lepsza od natywnej aplikacji desktopowej? Brak potrzeby instalacji Szybszy dostęp dla nowych użytkowników Dostęp z każdego miejsca Nieufność do aplikacji natywnych związana z wirusami Łatwe publikowanie aktualizacji Wystarczy wdrożyć nową wersję na serwer Współczesne przeglądarki desktopowe są wystarczająco dobre Współczesne łącza są szybkie

Aplikacje desktopowe 6 Dlaczego strona internetowa jest lepsza od natywnej aplikacji desktopowej? Swoboda w kreowaniu publikowanych treści Niski próg wejścia HTML, CSS, PHP Darmowe narzędzia dla deweloperów Naturalny interfejs dla usług chmurze

Aplikacje desktopowe 7 Coraz więcej aplikacji dedykowanych trafia do chmury Aplikacje do prowadzenia księgowości Aplikacje dla recepcji w przychodni lekarskiej Jedna aplikacja będąca interfejsem dla pacjentów i pracowników Aplikacje do obsługi dziekanatu Moja PG :) IDE w przeglądarce Oczywiście cały czas istnieją wymagania wymuszające wykorzystanie aplikacji natywnych O nich nieco później

Aplikacje mobilne 8 Na rynku urządzeń mobilnych trend jest odwrotny

Aplikacje mobilne 9 Dlaczego natywna aplikacja mobilna jest lepsza od mobilnej strony internetowej?

Aplikacje mobilne 10 Dlaczego natywna aplikacja mobilna jest lepsza od mobilnej strony internetowej? Mobilne przeglądarki nie są tak wydajne jak desktopowe 8-rdzeniowy CPU (big.little) nie pomoże, gdy na stronie osadzony jest plik wideo i kilka reklam Mobilne strony nawet te responsywne nie są wygodne w obsłudze na dotykowym ekranie i odbiegają od UX guide i es dla systemów mobilnych

Aplikacje mobilne 11 Dlaczego natywna aplikacja mobilna jest lepsza od mobilnej strony internetowej? Ograniczony dostęp do natywnych możliwości urządzenia z poziomu mobilnej strony Kamera, akcelerometr itd. To stopniowo ulega zmianie ARM NEON, RenderScript Brak możliwości działania w tle To również ulega zmianie

Współczesny rynek aplikacji 12 Dedykowane aplikacje dla smartphonów powstają, aby zoptymalizować działanie pod kątem: Wydajności Interfejsu użytkownika Dostępu do specyficznych możliwości platformy Akcelerometr, kamera, GPS Integracji z systemem

Dedykowane aplikacje desktopowe 13 Dedykowane aplikacje desktopowe powstają, aby zoptymalizować działanie pod kątem: Wydajności Interfejsu użytkownika, łatwości wprowadzania danych Klawiatura! i ewentualnie myszka Znajomo wyglądający interfejs Liczba informacji widocznych na ekranie Nie obsługa dotykowa i nie ogromne kafle Dostępu do specyficznych możliwości platformy Karta graficzna, CUDA Porty dla dedykowanych urządzeń np. urządzenia pomiarowe

Współczesny rynek aplikacji 14 Najczęściej spotykany model: aplikacja internetowa + klient dla smartphonów/tabletów Logika biznesowa w postaci usług sieciowych łatwe współdzielenie

Aplikacje internetowe 15 Przed erą mobilną Cała mechanika witryny po stronie serwera Przeglądarka wyświetla gotowe dokumenty HTML otrzymane od serwera Ograniczona dynamika w przeglądarce Początek ery mobilnej Serwer generuje dokumenty HTML dla przeglądarki, a dla aplikacji mobilnej udostępnia API (np. dane w formacie JSON) Aplikacja serwerowa udostępnia swoją funkcjonalność na dwa różne sposoby kłopotliwe, problemy z bezpieczeństwem A w międzyczasie Wzrost wydajności przeglądarek Możliwość obsłużenia skomplikowanych interakcji

Aplikacje internetowe 16 Skoro aplikacja serwerowa i tak musi udostępniać API dla klienta mobilnego, to czy klient w przeglądarce nie mógłby używać tego samego API? Te same punkty wejścia dla wszystkich aplikacji klienckich Jednolite mechanizmy logowania i kontroli dostępu Aplikacja serwerowa skupia się na logice biznesowej Za interakcje z użytkownikiem odpowiedzialne aplikacje klienckie Przejrzysty podział odpowiedzialności: front-end lub back-end deweloper

Aplikacje internetowe: 17 MVC w przeglądarce Pojawienie się nowych frameworków, które ułatwiają budowanie złożonych interakcji w przeglądarce MVC: Model View Controller Wzorzec architektoniczny modelujący przepływ sterowania w interfejsie użytkownika Oryginalnie zaproponowany przez Trygve Reenskaug w latach 70. dla graficznych interfejsów użytkownika Dzieli kod aplikacji na trzy części w celu oddzielenia wewnętrznych reprezentacji danych od sposobu, w jaki są one przedstawiane użytkownikowi

MVC wykorzystuje Controller manipuluje Użytkownik Model jest prezentowany View aktualizuje Kontroler aktualizuje model danych w odpowiedzi na akcje użytkownika podejmowane w interfejsie Model danych dane, na których operuje aplikacja Widok reprezentacja danych widoczna dla użytkownika

MVC w przeglądarce 19 Frameworki definiują w jaki sposób zorganizować kod projektu Jak podzielić logikę interakcji Jak powiązać logikę z widokami Dostarczają funkcje narzędziowe do wykonywania typowych operacji np. wywoływanie usług po stronie serwera

MVC w przeglądarce 20 Backbone.js Knockout.js Ember.js Vue.js Polymer Angular React

21 Angular

Framework Angular 22 Angular 1.x 2009 Angular 2.x wrzesień 2016 Framework został przepisany od zera Język TypeScript Wersja 2.x znacznie bardziej przypomina framework React niż Angulara 1.x Migracja 1.x 2.x wymaga wielu modyfikacji Angular 4, 5 2017 Wersjonowanie semantyczne Wersja 3.x pominięta ze względu na rozbieżność wersji poszczególnych komponentów Google planuje nowe wydanie średnio co pół roku

Wersjonowanie semantyczne 23 major.minor.patch 2.7.3 Patch poprawki błędów kompatybilne z poprzednią wersją, np. 2.7.4 Minor - nowe funkcjonalności kompatybilnr z poprzednimi wersjami, np. 2.8.0 Major zmiany niekompatybilne wstecznie, np. 3.0

Wersje frameworka a aplikacja 24 Jeśli chcemy mieć dostęp do nowych funkcji oraz poprawek bezpieczeństwa, musimy migrować naszą aplikację na nowsze wersje frameworka Patch, minor zmiany kompatybilne wstecznie Kod nasz naszej aplikacji nie wymaga modyfikacji do poprawnego działania na nowej wersji frameworka Major wymaga zmian w naszym kodzie, aby dokonać migracji Wymaga roboczogodzin Te zmiany nie muszą być bolesne dla deweloperów Autorzy Angulara nie planują przepisywać frameworka do zera ko ej y raz Każde kolejne wydanie wprowadza nowe zmiany Jeśli zrezygnujemy z migracji później będzie już tylko trudniej

25 TypeScript

Co jest nie tak z JavaScriptem? 26 Dynamiczne typowanie Brak weryfikacji typów na etapie wytwarzania kodu dopiero na etapie uruchomienia w przeglądarce Ograniczone wsparcie narzędziowe (IDE nie jest w stanie prawidłowo podpowiadać dostępnych metod obiektów) Kontrakty funkcji i obiektów opisane w dokumentacji, a nie w kodzie źródłowym Dokumentacja jest często nieaktualna, nikt nie lubi jej pisać Dynamiczne typowanie jest wygodne w małych projektach W dużych, wieloosobowych projektach statyczne typowanie często ułatwia pracę Kontrola typów na etapie kompilacji/transpilacji, lepsze wsparcie narzędziowe

Co jest nie tak z JavaScriptem? 27 Brak wsparcia dla modułów (pakietów, zasięgów) na poziomie języka Idiom IIFE immediately-invoked function expression wprowadzanie zasięgu leksykalnego przy użyciu zasięgu funkcji Brak granularnej kontroli nad widocznością pól obiektów (np. private, package, protected, public) W efekcie: JavaScript słabo skaluje się w dużych projektach

TypeScript 28 Statycznie typowany język transpilowany do języka JavaScript Deweloper pracuje w TypeScripcie, przeglądarka otrzymuje zrozumiały dla siebie JavaScript Oferuje kompatybilność z najnowszymi wersjami JavaScriptu (ECMAScript 2016) Transpilacja do starszej wersji np. ECMAScript 5 Według wyboru dewelopera: tsc --target Problem wersji standardu i wersji przeglądarek

ECMAScript 29 1997 ECMAScript 1 1998 ECMAScript 2 (editorial changes only) 1999 ECMAScript 3 ECMAScript 4 nie doczekał się publikacji 2009 ECMAScript 5 (Internet Explorer 11) 2011 ECMAScript 5.1 (editorial changes only) 2015 ECMAScript 6 2016 ECMAScript 7

Rynek przeglądarek 30 W przeszłości nowe wersje przeglądarek wydawane były raz na rok lub raz na kilka lat np. Internet Explorer: 8 2009; 9 2011; 10 2012; 11 2013 Długi cykl wydawniczy opóźnia wprowadzanie nowych specyfikacji Google zapoczątkowało trend wydawania nowych wersji tak często, że nikogo to już nie obchodzi Google Chrome: 1.0 2008; 55 2016; 65 01.2018 (średnio 6-7 wydań/rok) Inkrementalne zmiany, szybkie wprowadzanie nowych funkcji Automatyczne instalowanie aktualizacji (przezroczyste dla użytkownika) Inne przeglądarki podążają za tym trendem: Firefox 58, Opera 51, Edge 41 ale nie wszystkie: Safari 11

31 Rynek przeglądarek

Problem z Internet Explorerem 11 32 Kolejnego wydania Internet Explorera (IE 12) nie będzie Microsoft rozwija przeglądarkę Edge Edge jest dostępny tylko dla Windows 10 Brak back-portu dla Windows 7 Windows 7 cały czas funkcjonuje na wielu komputerach Szczególnie na rynku korporacyjnym Wielu klientów korporacyjnych wymaga kompatybilności z IE 11

TypeScript 33 Umożliwia korzystanie z istniejących bibliotek JavaScriptowych Poprawny kod JavaScript jest też poprawnym kodem TypeScript Dec aratio Fi es zawierają deklaracje typów dla bibliotek zaimplementowanych w JavaScriptcie, np. http://definitelytyped.org/ Wygenerowane pliki.js są (w miarę) czytelne dla dewelopera Strategia wyjścia Wersja 1.0: kwiecień 2014

TypeScript podstawowe użycie 34 Instalacja: $ npm install -g typescript Transpilacja pliku: $ tsc file.ts Obserwowanie zmian: $ tsc --watch file.ts Popularne IDE oferują integrację z narzędziami

35 Przegląd składni

Typy proste 36 Boolean: let isdo e: boolean = false; Po transpilacji: var isdone = false; Number: let age: number = 42; let co or: number = 0xf00dcc; String: let color: string = "blue"; color = 'red'; color = 0xaabbcc; Type '11189196' is not assignable to type 'string'

Typy proste 37 String szablony: let username: string = `world`; let greeti g: string = `Hello, ${ username }!`; Po transpilacji: var username = "world"; var greeting = "Hello, " + username + "!"; Tablice: let ist1: number[] = [42, 36, 28]; let list2: Array<number> = [27, 45, 19]; Wszystkie elementy tablicy tego samego typu

Typy proste 38 Krotki: let x: [string, number] = ["Waldemar", 22]; Typy wyliczeniowe: enum Color {Red, Green, B ue}; let c: Color = Color.Green; Typ Any: let zmie a: any = 42; zmie a = "Imiesław"; zmie a = false; Typ Void: Tylko null lub undefined Używany w deklaracjach typów zwracanych funkcji

Funkcje z deklaracjami typów 39 function greeter(username: string): string { return "Hello, " + username; } Podpowiadanie składni na podstawie typu

Funkcje bez deklaracji typów 40 JavaScript function greeter(username) { return "Hello, " + username; } Podpowiadanie składni

Parametry funkcji 41 Standardowo wszystkie parametry funkcji są wymagane Jak jest w przypadku JavaScriptu? Parametry opcjonalne można oznaczyć znakiem?: function greeter(user ame?: string): string { if(user ame) { return "Hello, " + user ame; } else { return "Hello!" } }

Parametry funkcji 42 Wartości domyślne definiowane na liście argumentów: function greeter(user ame: string = "world"): string { return "Hello, " + user ame; }

Zmienna liczba argumentów 43 function greeter(firstname: string,...othernames: string[]): string { return "Hello, "+user ame+" "+othernames.join(", "); } //wywołanie: greeter("world", "Waldemar", "Michał");

Programowanie obiektowe 44 Jest to styl programowania bazujący na pojęciu klasy i obiektu A jak jest w JavaScriptcie? Upraszcza proces projektowania, tworzenia i testowania systemów informatycznych Każdy element świata rzeczywistego w programie odzwierciedlony jest w postaci klasy, która łączy stan opisywanego przedmiotu z jego zachowaniem.

Klasa 45 Definiuje pewien wycinek tego świata za pomocą jego własności W określaniu przynależności elementu do klasy przede wszystkim istotne jest, że element posiada daną własność Klasa stanowi definicję, czyli tylko określa pewne elementy, ale sama w świecie elementów formalnie nie istnieje Klasę definiuje jej nazwa a nie zbiór własności

Obiekt 46 Jest to konkretny element świata, ale widziany jako należący do pewnej klasy, stąd nazywany jest instancją klasy Dla obiektu własności istotne z punktu widzenia klasy powinny mieć już konkretne wartości Pole obiektu to własność klasy z określoną konkretną wartością i przypisaną do konkretnego obiektu

Metody klas 47 Jest odpowiednikiem czynności, którą obiekt danej klasy może wykonać z punktu widzenia programisty zawiera w sobie kod, który zadziała w momencie jej wywołania. Jest odpowiednikiem procedury z programowania strukturalnego. Metoda może pobierać parametry oraz zwracać jakiś wynik.

Konstruktor 48 Metoda wywoływana automatycznie w momencie tworzenia instancji klasy Konstruktor służy do wstępnego ustawienia pól, wykonania jakiś czynności inicjalnych itp. Jak do każdej innej metody, tak samo i do konstruktora można przekazać parametry

Przykład klasy 49 class Greeter { greeti g: string; constructor(message: string) { this.greeti g = message; } } greet() { return "Hello, " + this.greeting; } let greeter = new Greeter("world"); let po ita ie = greeter.greet();

Dziedziczenie 50 Możliwe jest tworzenie hierarchii klas umożliwiającej specjalizowanie opisu danego elementu rzeczywistości. Klasa dziedzicząca przejmuje wszystkie własności i metody klasy, po której dziedziczy, o ile ich poziom widoczności jest inny niż private. Klasa dziedzicząca może jednak przesłaniać metody klasy nadrzędnej dostarczając własnej implementacji.

Dziedziczenie klasa bazowa 51 class Animal { public ame: string; public constructor(thename: string) { this. ame = thename; } } public move(dista cei Meters: number) { console.log( `${this.name} moved ${dista cei Meters}m.`); }

Klasa potomna 52 class Snake extends Animal { constructor( ame: string) { super( ame); } } move(dista cei Meters = 5) { console.log("slithering..."); super.move(dista cei Meters); }

Inna klasa potomna 53 class Horse extends Animal { constructor( ame: string) { super( ame); } } move(dista cei Meters = 45) { console.log("galloping..."); super.move(dista cei Meters); }

Poziomy dostępu 54 Public domyślny Pola i metody widoczne dla innych klas Protected Widoczne tylko w obrębie hierarchii dziedziczenia Private Dostępne tylko w obrębie danej klasy

Akcesory 55 Nie zaleca się udostępniania bezpośredniego dostępu do pól klasy class Animal { private _ ame: string; get name(): string { return this._name; } } set name( e Name: string) { this._ ame = e Name; }

Klasy abstrakcyjne 56 Możemy sobie wyobrazić klasę, która nie ma i nie powinna mieć żadnych wystąpień a pomimo to sama w sobie powinna istnieć np. Ssak. W metodologii obiektowej rolę takich klas przyjmują klasy abstrakcyjne. Nie może istnieć żaden obiekt typu klasy abstrakcyjnej. W klasie abstrakcyjnej możemy (ale nie musimy) zadeklarować jedną lub więcej metod jako abstrakcyjne. Metoda abstrakcyjna nie posiada "ciała" (kodu źródłowego), ale wymaga, aby każda klasa potomna albo tą metodę przesłoniła, wypełniając ją kodem, albo sama była abstrakcyjna.

Przykład klasy abstrakcyjnej 57 abstract class Animal { abstract makesound(): void; } move(): void { console.log("move"); }

Interfejsy 58 Opisuje kontrakt, który powinny spełniać obiekty Oczekiwane pola Dostępne metody Nie tworzymy instancji interfejsu lecz obiekty, które ten interfejs implementują

Interfejs i jego implementacja 59 interface Person { firstname: string; lastname: string; } email(message: string): string; class Student implements Person { firstname: string; astname: string; } email(message: string): string { return this.firstname + "." + this.lastname + "@student.pg.edu.pl"; }

Interfejs i jego implementacja 60 let p: Person = {firstname: "Imiesław", lastname: "Nazwiskowy", email(): function() /*...*/}; let p2: Person = new Person(); //błąd kompilacji let p3: Person = new Student("Nazwisław", "Imiesłowy");

Filary programowania obiektowego 61 Enkapsulacja (hermetyzacja) Gromadzenie pól w obrębie klas i określanie poziomu dostępu do nich Dziedziczenie Wykorzystywanie implementacji klas nadrzędnych w klasach potomnych Polimorfizm Posługiwanie się instancjami klas potomnych jak instancjami klas nadrzędnych

62 Pytania?