Inne podejścia obiektowe. Referat na seminarium magisterskie Zagadnienia Programowania Obiektowego Dymitr Pszenicyn



Podobne dokumenty
Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Programowanie obiektowe - 1.

Programowanie Obiektowe i C++

JavaScript - korzenie

Programowanie obiektowe

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

Oracle PL/SQL. Paweł Rajba.

Dziedziczenie. Tomasz Borzyszkowski

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie obiektowe

JavaScript funkcyjność

PROGRAMOWANIE W ŚRODOWISKU FLASH wykład 2

Redis, skrypty w języku Lua

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

Funkcje i instrukcje języka JavaScript

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Programowanie obiektowe

Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2]

Podstawy Programowania Obiektowego

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

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

Tworzenie Stron Internetowych. odcinek 10

Dziedziczenie. dr Jarosław Skaruz

Technologie i usługi internetowe cz. 2

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

Programowanie Obiektowe i C++

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

Modelowanie obiektowe

Języki skryptowe w programie Plans

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

Programowanie obiektowe

Wykład 9: Polimorfizm i klasy wirtualne

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

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

JAVAScript w dokumentach HTML (1)

10. Programowanie obiektowe w PHP5

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

Kurs WWW. Paweł Rajba.

Programowanie Obiektowe i C++

1. Prawie wszystko jest obiektem (poza nullem i 'undefined'). 3. Dostęp do metod uzyskuje się analogicznie do właściwości:

Test przykładowy 2 PAI WSB Wrocław /06/2018

.NET Klasy, obiekty. ciąg dalszy

Programowanie obiektowe. Wykład 4

Paweł Kurzawa, Delfina Kongo

Wykład 5: Klasy cz. 3

Programowanie Obiektowe i C++ Marcin Benke

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

Wykład 8: klasy cz. 4

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Krótki kurs JavaScript

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

Programowanie Obiektowe i C++

Programowanie obiektowe

Programowanie obiektowe

Wykład 4: Klasy i Metody

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Paradygmaty programowania

Programowanie obiektowe

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

Materiały do zajęć VII

Definicje klas i obiektów. Tomasz Borzyszkowski

Wykład 6: Dziedziczenie

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

Język C++ Programowanie obiektowe

Cw.12 JAVAScript w dokumentach HTML

Szkolenie wycofane z oferty. Programowanie w JavaScript (zawiera jquery)

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

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

Polimorfizm. dr Jarosław Skaruz

Podstawy programowania. Wprowadzenie

Rozdział 4 KLASY, OBIEKTY, METODY

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

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

Programowanie obiektowe

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

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Technologie obiektowe

Programowanie, część I

Przeciążanie operatorów

Dokumentacja do API Javy.

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

TECHNOLOGIE INTERNETOWE WYKŁAD 6. JavaScript Funkcje i obiekty

PHP 5 język obiektowy

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

Laboratorium 1 - Programowanie proceduralne i obiektowe

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Diagramy klas. dr Jarosław Skaruz

Definiowanie własnych klas

XML extensible Markup Language. część 5

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

KOTLIN. Język programowania dla Androida

Transkrypt:

Inne podejścia obiektowe Referat na seminarium magisterskie Zagadnienia Programowania Obiektowego Dymitr Pszenicyn

Wprowadzenie Obiektowość oparta na prototypowaniu w językach programowania obiektowego Są mniej popularne od języków z typową obiektowością (klasami i instancjonowaniem)

Języki z prototypowaniem ActionScript (oparty na ECMAScript) Agora (porzucony projekt?) Amulet (rozszerzenie Garnet a i przeniesienie do C++) Brain (składnia podobna do Smalltalk a, zapożyczenia z Scheme, Self i JavaScript) Cecil/Vortex (bazuje na Self ie) Cel (porzucony projekt?)

Języki z prototypowaniem (cd.) Dialect (podobny do NewtonScript, opracowany dla urządzeń przenośnych Windows CE) ECMAScript (standard dla JavaScript i JScript) Garnet (dodanie obiektowości do Common Lisp a, wspomaga tworzenie GUI) GlyphicScript Io (oparty na Smalltalku) JavaScript (oparty na ECMAScript) JScript (oparty na ECMAScript) Kevo

Języki z prototypowaniem (cd.) Lua (skryptowy język opracowany jako biblioteka w C) Merlin (porzucony projekt?) MLud (rozszerzenie Standard ML) Moostrap (oparty na Scheme) MSmalltalk (mój Smalltalk z prototypowaniem) NewtonScript (obiekty posiadają dwa sloty na dziedziczenie: is-a i is-in po których idzie przeszukiwanie w głąb)

Języki z prototypowaniem (cd.) Obliq (dla zorientowanych obiektowo obliczen rozproszonych) Omega (oparty na Smalltalk u) OScheme (rozszerzenie Scheme) Self (oparty na Smalltalku) SK8 (porzucony projekt?)

ECMAScript (JavaScript/JScript oraz ActionScript)

Historia JavaScript (na początku nazywał się LiveScript) został zaprojektowany przez Netscape jako interpretowany język skryptowy do zastosowania na stronach WWW i interpretowany przez przeglądarkę. JavaScript pojawił się w przeglądarkach Netscape Navigator 2.0 (JavaScript) oraz Microsoft Internet Explorer 3.0 (JScript)

O języku ECMAScript jest standardem powstałym na podstawie języków JavaScript i JScript. Najnowsza wersja standardu to wersja 3 z 24 marca 2000 roku. ECMAScript używany jest również przez Macromedia Flash (nazywa się ActionScript).

Cechy języka Jest to język skryptowy, czyli mający wspomagać, rozszerzać i automatyzować już istniejące środowisko (np. wbudowany do przeglądarki WWW). Języka można używać do pisania programów proceduralnych oraz obiektowych. Obiektowość oparta na prototypowaniu, brak klas. Brak silnego systemu typów.

Cechy języka (cd.) Język jest w całości dynamiczny, np. atrybuty mogą być dynamicznie dodawane do obiektów. Każdy obiekt ma konstruktor (funkcję za pomocą której został stworzony). W funkcjach obiektu mamy dostęp do this. Możemy dynamicznie przypisywać funkcje do obiektów.

Cechy języka (cd.) Możemy otrzymać polimorfizm po prostu tworząc funkcje o identycznych nazwach w różnych obiektach. Każdy obiekt ma wskaźnik na prototyp (prototype). Jeśli metoda albo atrybut nie jest znaleziony w obiekcie, to sprawdzamy w prototypie. W ten sposób mamy hierarchie ze względu na prototypy. Object jest korzeniem hierarchii.

Wbudowane typy Undefined Null Boolean Number String

Przykłady wbudowanych obiektów Boolean Number String Array Image Date Math

Różnica pomiędzy typami wbudowanymi a obiektami var pimitivestring1 = "This is a primitive string"; var pimitivestring2 = String("This is a primitive string"); var stringobject = new String("This is a String object"); primitivestring1.prop = "This is a property"; primitivestring2.prop = "This is a property"; stringobject.prop = "This is a property"; alert(primitivestring1.prop) // displays "undefined" alert(primitivestring2.prop) // displays "undefined" alert(stringobject.prop) // displays "This is a property" alert(typeof primitivestring1); // displays "string" alert(typeof primitivestring2); // displays "string" alert(typeof stringobject) // displays "object"

Funkcje Funkcje są jednocześnie konstruktorami obiektów. Wewnątrz funkcji możemy odwołać się do atrybutu arguments: function testarg(){ for(i=0;i<arguments.length;i++){ alert("argument "+i+" is "+arguments[i]); } }

Przykładowy fragment programu function Circle(radius){ this.radius = radius; this.getarea = function(){ return (this.radius*this.radius*3.14); } this.getcircumference = function(){ var diameter = this.radius*2; var circumference = diameter*3.14; return circumference; } } var bigcircle = new Circle(100); var smallcircle = new Circle(2); alert(bigcircle.getarea()); // displays 31400 alert(smallcircle.getcircumference()); // displays 12.56

Funkcje (cd.) Atrybut constructor zwraca funkcję za pomocą której stworzono ten obiekt. Można łatwo zmienić zachowanie obiektów (nawet wbudowanych) np. String.prototype.addDot=function (){ return this+. ; } var s = Test string ; alert(s.adddot()); Ustawiając atrybut prototype możemy łatwo odziedziczyć atrybuty i metody.

Przykład dziedziczenia z użyciem function Shape(color){ this.x = 4; this.y = 4; this.color = color; this.move = function(dx, dy){ this.x+=dx; this.y+=dy; } } function Circle(color){ this.r = 2; this.color = color; } Circle.prototype = new Shape(); function Square(color){ this.a = 2; this.color = color; } Square.prototype = new Shape(); var mycircle = new Circle("black"); var mysquare = new Square("red"); prototypu

Podsumowanie Mechanizm obiektowości w ECMAScript dobrze pasuje do języka skryptowego, który zarządza różnymi obiektami graficznymi (np. na stronie WWW), gdyż łatwo jest dodać lub zmienić atrybuty obiektów (również tworzonych na podstawie tego obiektu).

MSmalltalk Język z prototypowaniem oparty na Smallalku

Cechy języka MSmalltalk jest czysto obiektowym językiem programowania w którym nowe obiekty są tworzone na podstawie już istniejących (prototypowanie). Klasy istnieją w tym sensie, że obiekty należące do tej samej klasy mają te same metody i takie same zmienne obiektowe. W ten sposób można mowić o dziedziczeniu po pewnej klasie. Hierarchia klas jest drzewem z wyróżnionym korzeniem, więc każda klasa może dziedziczyć co najwyżej po jednej klasie. Z powodu prototypowania, metody (i zmienne) klasowe są metodami (i zmiennymi) w obiekcie klasy czyli są jednocześnie metodami (i zmiennymi) we wszystkich obiektach danej klasy.

Cechy języka (cd.) Metody (#def_method i #def_class) do tworzenia metod i klas są częścią języka. W języku występuje zmienna #self, która oznacza ten właśnie obiekt. W języku występuje konstrukcja #super, która oznacza wywołanie metody z nadklasy (w klasie Object to jest Object). Zmienne obiektowe są deklarowane (np. a b c ) w momencie definiowania nowej klasy. Deklaracja zmiennych lokalnych (np. x y z ) może wystąpić tylko na początku definicji metody.

Cechy języka (cd.) Zmienne globalne muszą być zapisywane z dużej litery. Używa się ich bez deklarowania. Są trzy rodzaje metod (w kolejności od najmocniej wiążących): metody bezargumentowe, operatory dwuargumentowe (+, -,, /, =, <, itd.), metody wieloargumentowe.

Cechy języka (cd.) W przypadku metod wieloargumentowych, w odróżnieniu od Smalltalk a, argumenty nie są nazywane i nazwa metody nie powstaje z wielu części oddzielonych dwukropkami. W momencie deklaracji metody, przed każdym argumentem trzeba dodać dwukropek. W momencie wywołania metody, po nazwie metody należy umieścić dwukropek. W języku jest konstrukcja (średnik) pozwalająca na wysłanie kilku komunikatów (wywołania metod) do jednego obiektu (sekwencyjnie). Argumenty w definicji bloku powinny być poprzedzone dwukropkiem.

Cechy języka (cd.) Bloki instrukcji mogą mieć do trzech argumentów (włącznie). W programie można używać zagnieżdżonych komentarzy rozpoczynających się od (*, a kończących się *). Istnieje klasa Object po to by hierarchia klas miała korzeń i żeby mieć metody takie jak new.

Przykład programu Program ten nie wykorzystuje żadnych cech specyficznych dla prototypowania. W programie tworzona jest klasa Example której obiekty mają zmienną liczba. Następnie jest tworzona podklasa MyExample która ma dodatkowo zmienną inna_liczba. Niektóre metody podklasy korzystają z metod nadklasy. Na końcu programu tworzony jest obiekt klasy MyExample i jest przypisywany na zmienną globalną MExamp. W obiekcie tym są wołane metody zmieniające zmienne tego obiektu, a następnie metoda wypisująca wartości zmiennych.

Przykład programu (cd.) Object #def_class Example liczba. Example #def_method new { ^(#super new) set_liczba: 123 ; yourself }. Example #def_method set_liczba :licz { liczba := licz }. Example #def_method get_liczba { ^ liczba }. Example #def_method add_liczba :licz { liczba := liczba + licz }. Example #def_method show { ("Liczba = ", (liczba tostring), "\n") print }.

Przykład programu (cd.) Example #def_class MyExample inna_liczba. MyExample #def_method new { ^(#super new) initialize ; yourself }. MyExample #def_method initialize { inna_liczba := 456 }. MyExample #def_method zamien_liczby tmp { tmp := inna_liczba. inna_liczba := liczba. liczba := tmp }. MyExample #def_method show { #super show. ("Inna_Liczba = ", (inna_liczba tostring), "\n") print. (liczba < inna_liczba) iftrue: [ ((liczba tostring), " < ", (inna_liczba tostring), "\n") print ] }.

Przykład programu (cd.) MyExample #def_method show { #super show. ("Inna_Liczba = ", (inna_liczba tostring), "\n") print. (liczba < inna_liczba) iftrue: [ ((liczba tostring), " < ", (inna_liczba tostring), "\n") print ] }. MExamp := MyExample new. MExamp zamien_liczby; add_liczba: 111; zamien_liczby; show Po uruchomieniu, ten program wypisze: Liczba = 123 Inna_Liczba = 567 123 < 567

Przykład programu Program ten wykorzystuje i prezentuje wlasności języka związane z prototypowaniem. W programie tworzona jest klasa (obiekt) Test1 ze zmienna zm_obj1 oraz metodami dostępu do tej zmiennej get_zm1 oraz set_zm1. Następnie zmienna jest ustawiana na Test1. Tworzona jest także klasa (obiekt) Test2 z dodatkową zmienną zm_obj2. Następnie w obiekcie Test1 zmienna zm_obj1 jest ustawiana na Test1_2. Tworzone są również nowe obiekty na podstawie obiektów Test1, Test2 oraz innych obiektów. Wartości zmiennych sa wypisywane.

Przykład programu (cd.) Object #def_class Test1 zm_obj1. Test1 #def_method get_zm1 { ^ zm_obj1 }. Test1 #def_method set_zm1 :x { ^ zm_obj1 := x }. Test1 set_zm1: "Test1". Test1 #def_class Test2 zm_obj2. Test2 #def_method get_zm2 { ^ zm_obj2 }.

Przykład programu (cd.) Test2 #def_method set_zm2 :x { ^ zm_obj2 := x }. Test1 set_zm1: "Test1_2". "Test1 get_zm1 :: " print. (Test1 get_zm1) print. "\n" print. "Test2 get_zm1 :: " print. (Test2 get_zm1) print. "\n" print. "Glob1 := Test1 new\n" print. Glob1 := Test1 new.

Przykład programu (cd.) "Glob1 get_zm1 :: " print. (Glob1 get_zm1) print. "\n" print. "Glob1 set_zm1: TTTTT1\n" print. Glob1 set_zm1: "TTTTT1". "Glob1 get_zm1 :: " print. (Glob1 get_zm1) print. "\n" print. "Glob1_2 := Glob1 new\n" print. Glob1_2 := Glob1 new. "Glob1_2 get_zm1 :: " print. (Glob1_2 get_zm1) print. "\n" print.

Przykład programu (cd.) "Glob2 := Test2 new\n" print. Glob2 := Test2 new. "Glob2_2 := Glob2 new\n" print. Glob2_2 := Glob2 new. "Glob2_2 get_zm1 :: " print. (Glob2_2 get_zm1) print. "\n" print

Przykład programu (cd.) Po uruchomieniu, ten program wypisze: Test1 get_zm1 :: Test1_2 Test2 get_zm1 :: Test1 Glob1 := Test1 new Glob1 get_zm1 :: Test1_2 Glob1 set_zm1: TTTTT1 Glob1 get_zm1 :: TTTTT1 Glob1_2 := Glob1 new Glob1_2 get_zm1 :: TTTTT1 Glob2 := Test2 new Glob2_2 := Glob2 new Glob2_2 get_zm1 :: Test1

Podsumowanie Języka można używać nawet nie wiedząc że jest oparty na prototypowaniu. Jeśli wiemy że jest on oparty na prototypowaniu to możemy tworzyć obiekty na podstawie dowolnych innych oraz przypisać wartości na zmienne obiektowe w obiekcie który używamy do stworzenia innego żeby uzyskać wartości początkowe w nowym obiekcie.

Różnice w obiektowości pomiędzy ECMAScript a MSmalltalk W ECMAScript można dynamicznie dodawać atrybuty do obiektów. W ECMAScript można zmienić prototyp już istniejącego obiektu. MSmalltalk bardziej przypomina zwyczajną obiektowość z klasami. W MSmalltalk u zmienne obiektowe nie są widziane na zewnątrz obiektów.

Bibliografia Strona poświęcona językom programowania obiektowego z prototypowaniem: http://www.dekorte.com/proto/chart.html Inna strona o tej samej tematyce: http://www.pasteur.fr/~letondal/objectbased.html

Bibliografia (cd.) Strona w Google Directory poświęcona językom z prototypowaniem http://directory.google.com/top/computers /Programming/Languages/Object- Oriented/Prototype-based/ Strona domowa języka Brain http://brain.sourceforge.net/

Bibliografia (cd.) Specyfikacja języka ECMAScript ver. 3 http://www.mozilla.org/js/language/e262-3.pdf Implementacje języka JavaScript http://www.mozilla.org/js/

Bibliografia (cd.) Strona z wprowadzeniem do obiektowości w JavaScripcie http://www.webmasterbase.com/article/47 0 Druga część tego artykułu http://www.sitepoint.com/article/orientedprogramming-2/1

Bibliografia (cd.) Specyfikacja języka MSmalltalk (z formalną kontynuacyjną semantyką denotacyjną): Dymitr Pszenicyn Opis języka MSmalltalk ver. 1.6.5 http://rainbow.mimuw.edu.pl/~dp189434/s ml/msmallt.pdf Kod interpretera języka MSmalltalk napisanego w Moscow ML u.