Programowanie w Ruby

Podobne dokumenty
Programowanie w Ruby

Programowanie w Ruby

Programowanie obiektowe

Metaprogramowanie w Ruby

Programowanie w Ruby

Kurs rozszerzony języka Python

Programowanie w Ruby

Programowanie w Ruby

EPI: Interfejs Graficzny 2011/2012 Laboratorium nr 2 Programowanie obiektowe

Dziedziczenie. dr Jarosław Skaruz

Programowanie obiektowe

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Programowanie w Ruby

Klasy abstrakcyjne, interfejsy i polimorfizm

Enkapsulacja, dziedziczenie, polimorfizm

PHP 5 język obiektowy

Programowanie w Ruby

Programowanie obiektowe

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

Programowanie obiektowe - 1.

Podstawy programowania III

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

Wstęp do ruby dla programistów javy

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Diagramy klas. dr Jarosław Skaruz

Programowanie obiektowe

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Programowanie w Ruby

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie obiektowe

Programowanie obiektowe

Scala - programowanie obiektowo-funkcyjne

Wstęp do programowania obiektowego. Wykład 2

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

private - oznacza, że wszystkie elementy klasy bazowej zmieniają się w prywatne.

Programowanie obiektowe w języku

Aplikacje w środowisku Java

Programowanie w Ruby

Programowanie obiektowe

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

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

.NET Klasy, obiekty. ciąg dalszy

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

Materiały do zajęć VII

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

Dokumentacja do API Javy.

Programowanie obiektowe

Pola i metody statyczne

Do czego służą klasy?

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie Obiektowe i C++

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Wstęp do programowania 2

Wykład 9: Polimorfizm i klasy wirtualne

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

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

Definiowanie własnych klas

Programowanie w Internecie. Java

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

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

Wykład 4: Klasy i Metody

Programowanie i projektowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm. dr Jarosław Skaruz

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

Java Język programowania

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie obiektowe

Programowanie Komputerów

Programowanie obiektowe

Ada-95. Dariusz Wawrzyniak

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

Mechanizm dziedziczenia

Kurs WWW. Paweł Rajba.

Dziedziczenie. Tomasz Borzyszkowski

Aplikacje w środowisku Java

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie w Javie wykład 8 Interfejsy

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

Podstawy Programowania Obiektowego

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

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

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

Wykªad nr 4 Programowanie obiektowe

Programowanie w Ruby

Magia Ruby : programowanie na wesoło / Eric Weinstein. Warszawa, Spis treści

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

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Wprowadzenie do języka Ruby

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Transkrypt:

Programowanie w Ruby Wykład 4 Marcin Młotkowski 28 października 2016

Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 Marcin Młotkowski Programowanie w Ruby 2 / 41

Deklaracja klasy Klasy i obiekty class Device Marcin Młotkowski Programowanie w Ruby 3 / 41

Konstruktor Klasy i obiekty class Device def initialize(name, type) @name = name @type = type Marcin Młotkowski Programowanie w Ruby 4 / 41

Deklaracja metody Klasy i obiekty class Device def initialize(name, type)... def to s @name + + @type Marcin Młotkowski Programowanie w Ruby 5 / 41

Utworzenie obiektu Klasy i obiekty prive = Device.new( /dev/sdc, kingston ) puts prive.to s Marcin Młotkowski Programowanie w Ruby 6 / 41

Dygresja Klasy i obiekty Konwencja # równoważne: puts prive.to s puts prive Marcin Młotkowski Programowanie w Ruby 7 / 41

Klasy i obiekty Zmienne obiektu (zmienne instancyjne) Składnia @nazwa Zmienne instancyjne są prywatne. Marcin Młotkowski Programowanie w Ruby 8 / 41

Klasy i obiekty Dostęp do zmiennych obiektu (akcesory) class Device def name @name def zmien nazwe(nowa) @name = nowa Marcin Młotkowski Programowanie w Ruby 9 / 41

Inny modyfikator Klasy i obiekty class Device def name=(nowa) @name = nowa prive.name = Corsair Marcin Młotkowski Programowanie w Ruby 10 / 41

Klasy i obiekty Deklaracja akcesorów Deklaracja class Device attr reader :name Równoważne class Device def name @name Marcin Młotkowski Programowanie w Ruby 11 / 41

Modyfikatory Klasy i obiekty Zamiast pisać tak class Device def name=(nowa) @name = nowa Można napisać tak class Device attr writer :name Marcin Młotkowski Programowanie w Ruby 12 / 41

Klasy i obiekty Akcesor odczyt/zapis class Device attr accessor :name Marcin Młotkowski Programowanie w Ruby 13 / 41

Atrybuty wirtualne Klasy i obiekty class Device attr reader :name def long name @type + ---> + @name Użycie puts prive.name puts prive.long name Marcin Młotkowski Programowanie w Ruby 14 / 41

Atrybuty wirtualne Klasy i obiekty Implementacja obiektu reprezentującego temperaturę class Temperatura attr reader :temperatura Marcin Młotkowski Programowanie w Ruby 15 / 41

Atrybuty wirtualne Klasy i obiekty Implementacja obiektu reprezentującego temperaturę class Temperatura attr reader :temperatura Skale temperaturowe: Celsius Kelvin Fahrenheit Reamur Marcin Młotkowski Programowanie w Ruby 15 / 41

Klasy i obiekty Skale temperaturowe class Temperatura attr accessor :kelvin def celsius=(c) @kelvin = 273.15 + c def celsius return @kelvin - 273.15 def fahrenheit=(f) @kelvin = (f - 32) * (5/9) + 273.15 def fahrenheit return (@kelvin - 273.15)*(9/5) + 32 Marcin Młotkowski Programowanie w Ruby 16 / 41

Przykłady użycia Klasy i obiekty t = Temperatura.new t.kelvin = 273.15 puts Cels #{t.celsius}, fahr #{t.fahrenheit} Cels 0.0, fahr 32.0 Marcin Młotkowski Programowanie w Ruby 17 / 41

Klasy i obiekty Metody singletonowe t = Temperatura.new t.kelvin = 273.15 Skala Reaumura def t.reaumur; (@kelvin - 273.15)*(5/4) puts t.reaumur Marcin Młotkowski Programowanie w Ruby 18 / 41

Klasy i obiekty Zmienne i metody klasy (statyczne) class Device @@liczba = 0 def initialize @@liczba = @@liczba + 1 Marcin Młotkowski Programowanie w Ruby 19 / 41

Klasy i obiekty Zmienne i metody klasy (statyczne) class Device @@liczba = 0 def initialize @@liczba = @@liczba + 1 def Device.licznik @@liczba.to s Marcin Młotkowski Programowanie w Ruby 19 / 41

Klasy i obiekty Kontrola dostępu do pól i metod Zmienne klasy i obiektu są prywatne Metody klasy i obiektu są publiczne Marcin Młotkowski Programowanie w Ruby 20 / 41

Metody protected Klasy i obiekty Można korzystać w podklasach Można korzystać w metodach obiektów tej samej klasy Składnia class Device protected def scan def block protected :block Marcin Młotkowski Programowanie w Ruby 21 / 41

Metody prywatne Klasy i obiekty Można je wywoływać wyłącznie w postaci self.metoda prywatna Marcin Młotkowski Programowanie w Ruby 22 / 41

Klasy i obiekty Deklarowanie podklasy class Printer < Device Marcin Młotkowski Programowanie w Ruby 23 / 41

Klasy i obiekty Konstruktor w podklasie class Printer < Device def initialize(name, type, port) super(name, type) @port = port Marcin Młotkowski Programowanie w Ruby 24 / 41

Klasy i obiekty Dziedziczenie i przykrywanie metod Przykład class Device def to s... class Printer < Device... iglowka = Printer.new( biurkowa, dot printer, PRN: ) puts iglowka # puts iglowka.to s Wynik biurkowa dot printer Marcin Młotkowski Programowanie w Ruby 25 / 41

Klasy i obiekty Ulepszenie metody to s Pierwsza wersja class Printer < Device def to s super.to s + #{@port} Marcin Młotkowski Programowanie w Ruby 26 / 41

Klasy i obiekty Ulepszenie metody to s Pierwsza wersja class Printer < Device def to s super.to s + #{@port} Druga wersja class Printer < Device def to s super + #{@port} Marcin Młotkowski Programowanie w Ruby 26 / 41

Klasy i obiekty Na koniec o metodach Wszystkie metody są wirtualne. Marcin Młotkowski Programowanie w Ruby 27 / 41

Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 Marcin Młotkowski Programowanie w Ruby 28 / 41

Co to jest mixin Klasy i obiekty Mixin mechanizm włączania kodu modułu do deklaracji klasy Marcin Młotkowski Programowanie w Ruby 29 / 41

Przykład Klasy i obiekty Zadanie Zdefinowanie modułu do odczytywania stanu obiektu Marcin Młotkowski Programowanie w Ruby 30 / 41

Klasy i obiekty Implementacja modułu module Debugger def snapshot puts Stan obiektu klasy #{self.class} for iv in self.instance variables puts #{iv} = #{self.instance variable get(iv)} Marcin Młotkowski Programowanie w Ruby 31 / 41

Klasy i obiekty Wmiksowanie modułu do klasy class Drukarka < Device include Debugger... Marcin Młotkowski Programowanie w Ruby 32 / 41

Zastosowanie Klasy i obiekty lokalna = Drukarka.new( kuchenna, hp5000n, /dev/ ) lokalna.snapshot Marcin Młotkowski Programowanie w Ruby 33 / 41

Inne zastosowania Klasy i obiekty Moduł (mixin) Comparable implementuje operatory porównania <, <=, ==, >=, > i metodę between? wymaga implementacji operatora <=> Marcin Młotkowski Programowanie w Ruby 34 / 41

Klasy i obiekty Zastosowanie modułu Comparable class Wektor include Comparable def <=> (awektor) # zwraca -1 gdy self< awektor, 0 lub 1 Zastosowanie w1 = Wektor.new([3, -4, 5]) w2 = Wektor.new([-5, 12, -2]) w1 < w1 w1 >= w2 Marcin Młotkowski Programowanie w Ruby 35 / 41

Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 Marcin Młotkowski Programowanie w Ruby 36 / 41

Klasy i obiekty Wszystkie klasy są podklasami klasy Object Metody klasy Object class - klasa obiektu instance variables freeze to s i inne... Marcin Młotkowski Programowanie w Ruby 37 / 41

Chwila rozrywki Klasy i obiekty (irb)> 5.class Fixnum Marcin Młotkowski Programowanie w Ruby 38 / 41

Chwila rozrywki Klasy i obiekty (irb)> 5.class Fixnum (irb)> 5.class.class Class Marcin Młotkowski Programowanie w Ruby 38 / 41

Chwila rozrywki Klasy i obiekty (irb)> 5.class Fixnum (irb)> 5.class.class Class (irb)> 5.class.class.class Class Marcin Młotkowski Programowanie w Ruby 38 / 41

Klasy i obiekty Zmiana implementacji istniejącej klasy class Fixnum def to s return Niespodzianka! puts 5 Marcin Młotkowski Programowanie w Ruby 39 / 41

Klasy i obiekty Zagnieżdżanie klasy w klasie class A class InA x = A::InA.new Marcin Młotkowski Programowanie w Ruby 40 / 41

Klasy i obiekty Dostęp indeksowany class MyArray def [](i) return Zażądano #{i} def []=(i, v) puts [#{i}]= #{v} arr = MyArray.new arr[234] arr[34] = 16 Marcin Młotkowski Programowanie w Ruby 41 / 41