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

Podobne dokumenty
Wykªad nr 4 Programowanie obiektowe

Programowanie obiektowe

Metaprogramowanie w Ruby

Programowanie w Ruby

Programowanie w Ruby

Programowanie w Ruby

Podstawy i języki programowania

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

Wstęp do ruby dla programistów javy

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

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

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

Programowanie w Ruby

Aplikacje w środowisku Java

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

Programowanie obiektowe

Programowanie w Ruby

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie w Ruby

Wprowadzenie do języka Ruby

Technologie i usługi internetowe cz. 2

Warunki logiczne instrukcja if

Klasy cd. Struktury Interfejsy Wyjątki

Język ludzki kod maszynowy

Kurs rozszerzony języka Python


PARADYGMATY PROGRAMOWANIA Wykład 3

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

Programowanie w Ruby

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

Klasy i obiekty cz II

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Programowanie obiektowe

Wstęp do Programowania 2

Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

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

4. Funkcje. Przykłady

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

TEMAT : KLASY DZIEDZICZENIE

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

Programowanie Obiektowe i C++

Programowanie i projektowanie obiektowe

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy Programowania Podstawowa składnia języka C++

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Programowanie obiektowe

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

Wstęp do programowania

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Programowanie w Sieci Internet. Python: Operacje z plikami oraz obsługa wyjątków

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

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

Python wstęp do programowania dla użytkowników WCSS

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Przekazywanie argumentów wskaźniki

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

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

SWIFT. Zaawansowane Programowanie Obiektowe

Wykład 2 Składnia języka C# (cz. 1)

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

Zaawansowane aplikacje WWW - laboratorium

Metody Metody, parametry, zwracanie wartości

Dokumentacja techniczna API systemu SimPay.pl

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

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

Właściwości i metody obiektu Comment Właściwości

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

Programowanie obiektowe

Podstawy i języki programowania

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

Część 4 życie programu

Programowanie i projektowanie obiektowe

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Zofia Kruczkiewicz, ETE8305_2 1

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

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

Wstęp do programowania

Podstawy Języka Java

Programowanie w Ruby

Programowanie w Ruby

Programowanie w Ruby

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

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

Programowanie obiektowe

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Definiowanie własnych klas

Programowanie obiektowe - 1.

Programowanie Obiektowe i C++

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

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Wstęp do programowania

Programowanie obiektowe

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

I - Microsoft Visual Studio C++

Transkrypt:

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

Klasa temperatura Funkcjonalności: określanie temeratury w dowolnej skali konwersja temperatury do napisu odczytanie wartości i jednostki temperatury konwersja z jednej skali do innej dodawanie i odejmowanie temperatur zwielokrotnianie temperatury porównywanie temperatur definicja zera bezwzględnego

Klasa Temperature sposób użycia in_celsius = Temperature.new(36.6,:c) in_celsius.value #=> 36.6 in_celsius.scale #=> :c in_celsius.scale = :z # niemożliwe - wewnętrzna # struktura jest ukryta in_kelvins = in_celsius.to_kelvin # jednostka trzymana jest # "wewnątrz" invalid = Temperature.new(36.6,:z) # można np. rzucić wyjątek multiplied = in_celsius * 10 # zachowuje skalę invalid = Temperature.new(-300,:c) # można np. rzucić wyjątek sum = in_celsius + in_kelvins # da poprawny wynik if(in_celsius > in_kelvins) # da poprawny wynik #... zero = Temperature.absolute_zero # posiada określoną jednostkę puts zero # można określić domyślną # reprezentację np. 0 K

Klasa Temperature użycie w irb plik temperature.rb # encoding: utf-8 class Temperature # ciało klasy irb $:.unshift "." require temperature zmieniamy temperature.rb load temperature.rb

Konstruktor i konwersja na napis class Temperature # Initialize the temperature with +value+ and +scale+. def initialize(value,scale) @value = value @scale = scale # Default string representation of the temperature. def to_s "%.2f %s" % [@value, @scale.to_s.upcase] temperature = Temperature.new(36.6,:c) puts temperature #=> 36.60 C

Dostęp do atrybutów class Temperature # Returns the value of the temperature. def value @value # Returns the scale of the temperature. def scale @scale temp = Temperature.new(6,:c) temp.value #=> 6 Krócej: class Temperature attr_reader :value, :scale Poza tym: attr_writer, attr_accessor

Definiowanie metod class Temperature # Converts the temeperature to Kelvin scale. def to_kelvin Temperature.new(convert(@scale,:k,@value),:k) # Converts the temeperature to Celsius scale. def to_celsius Temperature.new(convert(@scale,:c,@value),:c) # Converts the temeperature to Fahrenheit scale. def to_fahrenheit Temperature.new(convert(@scale,:f,@value),:f)

Definiowanie metod cd. class Temperature # Converts (in place) the temeperature to Kelvin scale. def to_kelvin! @value = convert(@scale,:k,@value) @scale = :k self # Converts (in place) the temeperature to Celsius scale. def to_celsius! @value = convert(@scale,:c,@value) @scale = :c self # Converts (in place) the temeperature to Fahrenheit scale. def to_fahrenheit! @value = convert(@scale,:f,@value) @sclae = :f self

Definiowanie metod cd. class Temperature ABSOLUTE_ZERO = -273.15 # in Celsius CELSIUS_FACTORS = {:c => 1.0, :f => 1.8, :k => 1.0} CELSIUS_OFFSETS = {:c => 0, :f => 32, :k => -ABSOLUTE_ZERO} protected def convert(from,to,value) factor(from,to) * value + offset(from,to) def factor(from,to) return CELSIUS_FACTORS[to] if from == :c return (1 / CELSIUS_FACTORS[from]) if to == :c factor(from,:c) * factor(:c,to) def offset(from,to) return CELSIUS_OFFSETS[to] if from == :c return (- CELSIUS_OFFSETS[from] * factor(from,to)) if to == :c offset(from,:c) * factor(:c,to) + offset(:c,to)

Używanie własnych metod temp = Temperature.new(10,:c) puts temp.to_celsius puts temp.to_kelvin puts temp puts temp.to_fahrenheit temp = Temperature.new(10,:f) puts temp.to_celsius! puts temp puts temp.to_kelvin! puts temp.to_fahrenheit! puts temp #=> 10.00 C #=> 283.15 K #=> 10.00 C #=> 50.00 K #=> 12.22 C #=> 12.22 C #=> 260.93 K #=> 10.00 F #=> 10.00 F

Metody operatorowe class Temperature # Adds +other+ to the temperature. The result has the # same scale as left operand. def +(other) Temperature.new(self.value + other.value * factor(other.scale,@scale),@scale) # Subtracts +other+ from the temperature. The result has the # same scale as left operand. def -(other) Temperature.new(self.value - other.value * factor(other.scale,@scale),@scale) # Multiplies the temperature by given +factor+. def *(factor) Temperature.new(self.value * factor,@scale) puts Temperature.new(10,:c) + Temperature.new(20,:k) #=> 30.00 C puts Temperature.new(10,:c) * 10 #=> 100.00 C

Porównywanie wartości class Temperature include Comparable def <=>(other) self.to_kelvin.value <=> other.to_kelvin.value Temperature.new(10,:c) <=> Temperature.new(20,:c) #=> -1 Temperature.new(10,:c) <=> Temperature.new(20,:f) #=> 1 Temperature.new(10,:c) < Temperature.new(20,:f) #=> false Temperature.new(10,:c) >= Temperature.new(20,:f) #=> true Temperature.new(-273.15,:c) == Temperature.new(0,:k) #=> true

Metody i zmienne klasowe class Temperature @@absolute_zero = Temperature.new(0,:k) # Returns true if the temperature is an absolute zero. def zero? self == @@absolute_zero # The absolute zero. def Temperature.absolute_zero @@absolute_zero zero = Temperature.absolute_zero puts zero #=> 0 K puts zero.to_celsius #=> -273.15 C puts zero.zero? #=> true puts Temperature.new(10,:c).zero? #=> false

Poprawki w konstruktorze class Temperatura VALID_SCALES = [:c,:k,:f] # Initialize the temperature with +value+ and +scale+. def initialize(value,scale) unless VALID_SCALES.include?(scale) raise "Invalid scale #{scale}." @value = value @scale = scale if scale == :k if value < 0 raise "Temperature below absolute zero." else self.to_kelvin Temperature.new(36.6,:z) Temperature.new(-10,:k) #=> RuntimeError: Invalid scale z #=> RuntimeError: Temperature below absolute zero

Specyfikacja w postaci testów $:.unshift "." require temperature require minitest/autorun describe Temperature do before do @temp1 = Temperature.new(36,:c) it "should have proper value" do @temp1.value.must_equal 36 it "should have proper scale" do @temp1.scale.must_equal :c

Dostępne metody weryfikacji poprawności must_be_empty must_be_close_to must_be_instance_of must_be_nil must_be_same_as must_be_silent must_be_equal must_match must_raise wont_be wont_be_empty wont_be_close_to...

Temperatura skonwertuj wartość 10 F do Celsjuszy i Kelvinów sprawdź, która z wartości jest większa: 10 stopni Fahrenheita czy 10 stopni Celsjusza sprawdź ile w Kelvinach wynosi 10 stopni Fahrenheita dodać 10 stopni Celsjusza napisz testy weryfikujące poprawność definicji klasy Temperature: konwersja dodawanie, odejmowanie, mnożenie porównywanie wartość zera bezwzględnego niemożność stworznia niepoprawnej temperatury

Waluty Załóżmy, że mamy stworzyć system Portfel walutowy, który realizuje następujące funkcjonalności pozwala przeliczać ilość pieniędzy w jednej walucie na ilość pieniędzy w innej walucie pozwala wykonywać proste operacja arytmetyczne na pieniądzach w portfelu (dodawania, odejmowanie) zidentyfikuj przykładowe wartości, które mogą pojawić się w systemie zidentyfikuj klasy, które dobrze opisują te wartości określ jaki atrybuty i metody powinny posiadać te klasy zaimplementuj te klasy napisz testy jednostkowe dla tych klas

Więcej zadań try ruby http://tryruby.org przykładowe zadania apohllo.pl/dydaktyka/interfejsy-graficzne/zadania-ruby

Pytania PYTANIA?