Przygotował: Jacek Sroka. PO* Scala c.d. przygotował Jacek Sroka w oparciu o materiały Martina Oderskiego

Wielkość: px
Rozpocząć pokaz od strony:

Download "Przygotował: Jacek Sroka. PO* Scala c.d. przygotował Jacek Sroka w oparciu o materiały Martina Oderskiego"

Transkrypt

1 1 PO* Scala c.d. przygotował Jacek Sroka w oparciu o materiały Martina Oderskiego

2 2 Programowanie obiektowe vs programowanie funkcyjne Funkcje są pierwszoplanowym operatorem języka, można je traktować tak jak dane i na nich operować (składać w potężniejsze funkcje) P. obiektowe jest prostopadłe do p. funkcyjnego p. obiektowe uzupełnia (i imperatywne i funkcyjne i nawet w logice) W p. obiektowym globalny stan jest zły, w funkcyjnym w ogóle modyfikowanie stanu jest złe, bo to psuje prawa (teorie)

3 3 Funkcje wyższego rzędu Funkcje są normalnymi wartościami Można je przekazywać jako parametr i zwracać jako wynik Funkcje wyższego rzędu Suma liczb całkowitych między a i b def sumints(a: Int, b: Int): Int = if (a > b) 0 else a+sumints(a+1,b) Suma kwadratów liczb całkowitych między a i b def square(x:int): Int = x*x def sumsquares(a: Int, b: Int): Int = if (a > b) 0 else square(a)+sumsquares(a+1,b) Suma 2^n dla n od a do b def pt(x: Int): Int = if (x==0) 1 else 2*pT(x-1) def sumofpt(a: Int, b: Int): Int = if (a > b) 0 else pt(a)+sumofpt(a+1,b)

4 4 Bardziej ogólne rozwiązanie def sum(f: Int => Int, a: Int, b: Int): Int = if (a > b) 0 else f(a) + sum(f, a+1, b) def id(x: Int): Int = x def square(x: Int): Int = x*x def pt(x: Int): Int = if (x==0) 1 else 2*pT(x-1) def sints(a: Int, b: Int): Int = sum(id, a, b) def ssquares(a: Int, b: Int): Int = sum(square, a, b) def spt(a: Int, b: Int): Int = sum(pt, a, b)

5 5 Funkcje anonimowe Zamiast zaśmiecać przestrzeń nazw można używać wyrażeń, które wyliczają się do funkcji def s2ints(a: Int, b: Int) = sum((x: Int) => x, a, b) def s2squares(a: Int, b: Int) = sum((x: Int) => x*x, a, b) Typ parametru można pominąć, jeżeli kompilator da radę się go domyśleć def s3ints(a: Int, b: Int) = sum((x) => x, a, b) A jeżeli jest jeden parametr z oczywistym typem, to można pominąć nawiasy def s3squares(a: Int, b: Int) = sum(x => x*x, a, b)

6 6 Funkcje anonimowe to lukier syntaktyczny (ang. syntactic sugar) Rownoważne są (x1: T1,..., xn: Tn) => E {def f(x1: T1,..., xn:tn) = E; f _ //gdzie f jest nową nazwą _ oznacza potraktowanie niepełnego wywołania funkcji jako nowej funkcji (można je pomijać jeżeli w tym miejscu oczekiwano funkcji) def sum2(f : Int => Int): (Int, Int) => Int = { def sumf(a:int, b:int):int = if (a>b) 0 else f(a)+sumf(a+1, b) sumf //mamy mniej przepisywania parametrów a i b def ssquares = sum2(x=>x*x) ssquares(1,10) Aplikacja funkcji jest lewostronnie łączna (sum2(x=>x*x))(1,10) sum2(x=>x*x)(1,10)

7 7 Currying (wypromował Haskell B. Curry) Funkcje zwracające funkcje są tak przydatne, że jest dla nich specjalna składnia (znowu lukier) def sumc(f: Int => Int)(a: Int, b: Int): Int= if (a > b) 0 else f(a)+sumc(f)(a+1,b) def sints = sumc(x => x) _ def ssquares = sumc(x => x*x) _ def spt = sumc(pt) _ Faktycznie prawdziwa jest definicja rekurencyjna def f (args1)...(argsn) = E def f (args1)...(args(n-1)) = (argsn) => E lub def f (args1)...(args(n-1)) = {def g(argsn) => E; g... def f =(args1) =>... => (args(n)) => E

8 8 Przykład: punkty stałe val tolerance = def iscloseenough(x: Double, y: Double) = Math.abs((x-y)/x) < tolerance def fixedpoint(f: Double => Double)(firstGuess: Double) = { def iterate(guess: Double): Double = { val next = f(guess) if (iscloseenough(guess, next)) next else iterate(next) iterate(firstguess) przy pomocy takiej funkcji policzymy pierwiastek

9 9 Przykład: pierwiastek sqrt(x) to y taki że y*y=x, inaczej y=x/y def sqrt(x: Double) = fixedpoint(y=>x/y)(1.0) żeby uniknąć pętli ( ) trzeba wytłumić parametr guess (żeby nie zmieniał się tak szybko) def sqrt2(x: Double) = fixedpoint(y=>(y + x/y)/2)(1.0) A ponieważ takie tłumienie to dobry pomysł, można ogólniej def avgdamp(f: Double=>Double)(x: Double) = (x + f(x))/2 def sqrt3(x: Double) = fixedpoint(avgdamp(y=>x/y))(1.0)

10 10 Podsumowanie składni Program = ciąg znaków Unicode Znaki whitespace np., \t, \n letter a-z i A-Z digit 0-9 delimeter., ; ( ) { [ ] \ ' operator pozostałe znaki, np. # + : Dalej [] to opcja, a { to 0 lub wiele

11 Trochę gramatyki Leksemy ident = letter {letter digit operator { operator ident _ ident literal = jak w Javie, np. 0, 1.0e10, x, "he said \"hi!\"", true np. x Room10a + -- foldl_: +_vector do rozdzielania używamy spacji x+-y sparsuje się do x +- y trzeba dodać jakąś spację x+ -y $ jest zarezerwowany dla kompilatora Zarezerwowane abstract case catch class def do else extends false final finally for if implicit import match new null object override package private protected requires return sealed super this throw trait try true type val var while with yield _ : = => <<: <% >: 11

12 12 Trochę gramatyki c.d. Typy Type = SimpleType FunctionType FunctionType = SimpleType => Type ( [Types] ) => Type SimpleType = Byte Short Char Int Long Float Double Boolean Unit String Types = Type {, Type

13 13 Trochę gramatyki c.d. Wyrażenia Expr = InfixExpr FunctionExpr if ( Expr ) Expr else Expr InfixExpr = PrefixExpr InfixExpr Operator InfixExpr Operator = ident PrefixExpr = [ + -! ~ ] SimpleExpr SimpleExpr = ident literal SimpleExpr. ident Block FunctionExpr = Bindings => Expr Bindings = ident [':' SimpleType] '(' [Binding {',' Binding] ')' Binding = ident [ : Type] Block = { {Def ; Expr

14 14 Trochę gramatyki c.d. Definicje Def = FunDef ValDef FunDef = def ident { ( [Parameters] ) [ : Type] = Expr ValDef = val ident [ : Type] = Expr Parameters = Parameter {, Parameter Parameter = ident : [ => ] Type

15 15 Liczby wymierne class Rational(n: Int, d: Int) {//na razie tylko jeden konstr. //wykonuje ciało!!! private def gcd(x: Int, y: Int): Int = { if (x == 0) y else if (x < 0) gcd(-x, y) else if (y < 0) gcd(x, -y) else gcd(y % x, x) private val g = gcd(n, d) val numer: Int = n/g //def się wylicza za każdym wywołaniem val denom: Int = d/g //tu mamy pole, a nie metodę def +(that: Rational) = new Rational(numer * that.denom + that.numer * denom, denom * that.denom) def -(that: Rational) = new Rational(numer * that.denom - that.numer * denom, denom * that.denom) def *(that: Rational) = new Rational(numer * that.numer, denom * that.denom) def /(that: Rational) = new Rational(numer * that.denom, denom * that.numer) def unary_- : Rational = new Rational(-numer, denom) //spacja między "- :" jest potrzebna

16 16 Kolejność operatorów decyduje pierwszy znak; poniżej w kolejności rosnącego priorytetu (dowolne litery) ^ & < > =! : + - * / % (wszystkie pozostałe znaki specjalne) np. a + b ^? c?^ d less a ==> b c //wybieramy kolejno najsilniejsze operatory ((a + b) ^? (c?^ d)) less ((a ==> b) c)

17 17 Metody bezparametrowe Odwołujemy się jak do pól class Rational(n: Int, d: Int) extends AnyRef {... def square = new Rational(numer*numer, denom*denom) val r = new Rational(3, 4) println(r.square) // wypisze 9/16 Różnica polega na momencie wyliczenia wyrażenia dla pola w chwili tworzenia obiektu dla metody chwili wywołania Wygoda w zmienianiu definicji klasy (pole może stać się metodą)

18 18 Tworzenie i używanie obiektów var i = 1 //to jest zmienna (por val i def) var x = new Rational(0, 1) while (i <= 10) { x += new Rational(1, i) i += 1 println("" + x.numer + "/" + x.denom)

19 19 Parametry konstruktorów var mutowalne; val niemutowalne public class Foo() { public Bar bar; public Foo(Bar bar) {this.bar = bar; class Foo(val bar:bar) class Foo(_bar: Bar) { val bar = _bar public class Foo() { private final Bar bar; public Foo(Bar bar) {this.bar = bar; class Foo(private val bar: Bar)

20 20 Parametry konstruktorów public class Foo() { private Bar bar; public Foo(Bar bar) {this.bar = bar; public Bar getbar() {return bar; public void setbar(bar bar) {this.bar = bar; class Foo(@BeanProperty var bar:bar)//ale pole będzie public class Foo(aBar:Bar) {//to samo ale bez publicznego private var bar = abar

21 Przeciążone konstruktory class Person(val firstname: String, val lastname: String, val age: Int) { //wszystkie konstruktory wywołują w końcu konstruktor podstawowy /** * A secondary constructor. */ def this(firstname: String) { this(firstname, "", 0); println("\nno last name or age given.") //lub def this(firstname: String) = this(firstname, "", 0); /** * Another secondary constructor. */ def this(firstname: String, lastname: String) { this(firstname, lastname, 0); println("\nno age given.") override def tostring: String = { return "%s %s, age %d".format(firstname, lastname, age) 21

22 22 Dziedziczenie i przesłanianie Korzeniem hierarchii klas jest AnyRef class Rational(n: Int, d: Int) extends AnyRef { w implementacji Javowej to alias dla java.lang.object standardowe przedefiniowanie i dziedziczenie class Rational(n: Int, d: Int) extends AnyRef { override def tostring = "" + numer + "/" + denom Jak to w językach obiektowych podklasa może być używana wszędzie tam gdzie nadklasa var y: AnyRef = new Rational(1,2)

23 23 Dziedziczenie i przeciążone konstruktory class Student(firstName:String, lastname:string, age:int, val subject:string)//to val nie byłoby dozwolone dla //pozostałych parametrów, bo nie chcemy //powielać pól, które już były //(tu nie odróżniamy atrybutów/metody) extends Person(firstName, lastname, age) { def dosomething = { System.out.println("I'm studying hard, Ma, I swear! (Pass the beer, guys!)")

24 24 Liczby wymierne c.d. class Rational(n: Int, d: Int) { require(y!= 0, "denominator must be nonzero") //require(y > 0, "denominator must be pozitive") //... wyjątek java.land.illegalargumentexception: requirement failed: denominator must be nonzero

25 25 Klasy abstrakcyjne i traits przykład: zbiór liczb całkowitych abstract class IntSet { def incl(x: Int): IntSet def contains(x: Int): Boolean posiada składowe bez implementacji nie można tworzyć egzemplarzy traits to klasy abstrakcyjne, które można dodać do innych klas (coś jakby interfejs); ale nie mogą mieć parameterów (wartości przekazywanych do konstruktora) a odwołania do super jest są wyliczane dynamicznie więc można np. przy ich pomocy zrobić filtry (nie ma problemów z wielodziedziczeniem dzięki linearization) trait TestNależenia { def contains(x: Int): Boolean def czynależy(x: Int) = if (contains(x)) println("należy") else println("nienależy") class BST extends IntSet with TestNależenia with new BasicIntQueue with Incrementing with Filtering //mixin

26 26 Przykład: zbiory jako drzewa BST class EmptySet extends IntSet { def contains(x: Int): Boolean = false def incl(x: Int): IntSet = new NonEmptySet(x, new EmptySet, new EmptySet) class NonEmptySet(elem: Int, left: IntSet, right: IntSet) extends IntSet { def contains(x: Int): Boolean = if (x < elem) left contains x else if (x > elem) right contains x else true def incl(x: Int): IntSet = //pamiętamy wszystkie wersje tej kolekcji if (x < elem) new NonEmptySet(elem, left incl x, right) else if (x > elem) new NonEmptySet(elem, left, right incl x) else this

27 27 Dynamiczne wiązanie Wybór metody która ma być wywołana opiera się na rzeczywistym typie obiektu (new EmptySet).contains(7) -> (zastępujemy contains jej implementacją w EmptySet) false new NonEmptySet(7, new EmptySet, new EmptySet).contains(1) -> (zastępujemy contains jej implementacją w NonEmptySet) if (1 < 7) new EmptySet contains 1 else if (1 > 7) new EmptySet contains 1 else true -> (przepisanie instrukcji warunkowej) new EmptySet contains 1 -> (zastępujemy contains jej implementacją w EmptySet) false To jest podobne (inny rodzaj polimorfizmu) do wyboru funkcji jaka ma być wywołana przez funkcję wyższego rzędu, który jest dokonywany w chwili wywołania Scala reprezentuje funkcje jako obiekty

28 28 Obiekty (Singletony) Żeby nie tworzyć za często nowego egzemplarza EmptySet można zrobić sobie Singleton val EmptySetSingleton = new EmptySet niestety taka definicja w Scali nie jest dozwolona na najwyższym poziomie po co definiować klasę i singleton, w Scali można krócej object EmptySet extends IntSet { def contains(x: Int): Boolean = false def incl(x: Int): IntSet = new NonEmptySet(x, EmptySet, EmptySet) Obiekty są tworzone leniwie (w chwili pierwszego odwołania do składowej) wszystko tak jak w klasie, ale bez parametrów konstruktora

29 29 Klasy standardowe O wszystkich wartościach w Scali można myśleć jak o obiektach W module Predef, typy podstawowe są też zdefiniowane jako obiekty type boolean = scala.boolean type int = scala.int type long = scala.long... Kompilator optymalizuje operacje na typach podstawowych, ale semantycznie wszystko działa jak dla obiektów (uwaga na priorytety operacji)

30 30 Przykład: Boolean package scala abstract class Boolean { def && (x: => Boolean): Boolean def (x: => Boolean): Boolean def! : Boolean def == (x: Boolean) : Boolean def!= (x: Boolean) : Boolean def < (x: Boolean) : Boolean def > (x: Boolean) : Boolean def <= (x: Boolean) : Boolean def >= (x: Boolean) : Boolean

31 31 Hipotetyczna implementacja abstract class Boolean { def ifthenelse(thenpart: => Boolean, elsepart: => Boolean) def && (x: => Boolean): Boolean = ifthenelse(x, false) def (x: => Boolean): Boolean = ifthenelse(true, x) def! : Boolean = ifthenelse(false, true) def == (x: Boolean) : Boolean = ifthenelse(x, x.!) def!= (x: Boolean) : Boolean = ifthenelse(x.!, x) def < (x: Boolean) : Boolean = ifthenelse(false, x) def > (x: Boolean) : Boolean = ifthenelse(x.!, false) def <= (x: Boolean) : Boolean = ifthenelse(x, true) def >= (x: Boolean) : Boolean = ifthenelse(true, x.!) case object True extends Boolean { def ifthenelse(t: => Boolean, e: => Boolean) = t case object False extends Boolean { def ifthenelse(t: => Boolean, e: => Boolean) = e

32 32 Przykład: Int package scala abstract class Int extends AnyVal { def tolong: Long def tofloat: Float def todouble: Double def + (that: Double): Double def + (that: Float): Float def + (that: Long): Long def + (that: Int): Int //analogicznie dla -, *, /, % def << (cnt: Int): Int //analogicznie dla >>, >>> def & (that: Long): Long def & (that: Int): Int //analogicznie dla, ^ def == (that: Double): Boolean def == (that: Float): Boolean def == (that: Long): Boolean //analogicznie dla!=, <, >, <=, >=

33 Hipotetyczna implementacja (liczby naturalne) abstract class Nat { def iszero: Boolean def predecessor: Nat def successor: Nat def +(that: Nat): Nat def -(that: Nat): Nat object Zero extends Nat { def iszero: Boolean = true def predecessor: Nat = error("negative number") def successor: Nat = new Succ(Zero) class Succ(x: Nat) extends Nat { def iszero: Boolean = false def predecessor: Nat = x def successor: Nat = new Succ(this) def +(that: Nat): Nat = x + that.successor def -(that: Nat): Nat = if (that.iszero) this else x - that.predecessor def +(that: Nat): Nat = that def -(that: Nat): Nat = if (that.iszero) Zero else error("neg. number") 33

34 34 Wyrażenia w sposób obiektowy Cel: zaimplementować wyliczanie wyrażeń postaci new Sum(new Number(1), new Sum(new Number(3), new Number(7))) Pierwsze podejście abstract class Expr { def isnumber: Boolean def issum: Boolean def numvalue: Int def leftop: Expr def rightop: Expr class Number(n: Int) extends Expr { def isnumber: Boolean = true def issum: Boolean = false def numvalue: Int = n def leftop: Expr = error("number.leftop") def rightop: Expr = error("number.rightop") class Sum(e1: Expr, e2: Expr) extends Expr { def isnumber: Boolean = false def issum: Boolean = true def numvalue: Int = error("sum.numvalue") def leftop: Expr = e1 def rightop: Expr = e2

35 35 Wyliczanie abstract class Expr { def isnumber: Boolean def issum: Boolean def numvalue: Int def leftop: Expr def rightop: Expr def eval(e: Expr): Int = { if (e.isnumber) e.numvalue else if (e.issum) eval(e.leftop) + eval(e.rightop) else error("unrecognized expression kind") Wady?

36 36 Podejście bardziej obiektowe Kod zebrany razem z danymi abstract class Expr { def eval: Int class Number(n: Int) extends Expr { def eval: Int = n class Sum(e1: Expr, e2: Expr) extends Expr { def eval: Int = e1.eval + e2.eval Łatwe dodawanie nowych klas class Prod(e1: Expr, e2: Expr) extends Expr { def eval: Int = e1.eval * e2.eval

37 37 Dodawanie nowej operacji zewnętrzna metoda def print(e: Expr) { if (e.isnumber) Console.print(e.numValue) else if (e.issum) { Console.print("(") print(e.leftop) Console.print("+") print(e.rightop) Console.print(")") else error("unrecognized...") modyfikacja całej hierarchii abstract class Expr { def eval: Int def print class Number(n: Int) extends Expr { def eval: Int = n def print { Console.print(n) class Sum(e1: Expr, e2: Expr) extends Expr { def eval: Int = e1.eval + e2.eval def print { Console.print("(") print(e1) Console.print("+") print(e2) Console.print(")")

38 38 Dodawanie nowej operacji Co więcej czasami nowa operacja ma grzebać w wielu klasach, np. upraszczanie moglibyśmy sobie radzić przy pomocy "brzydkich chwytów" x.isinstanceof[t] = x instanceof T x.asinstanceof[t] = (T) x

39 39 Case classes i case objects Definicja abstract class Expr case class Number(n: Int) extends Expr case class Sum(e1: Expr, e2: Expr) extends Expr Darmowe konstruktory def Number(n: Int) = new Number(n) def Sum(e1: Expr, e2: Expr) = new Sum(e1, e2) Sum(Sum(Number(1), Number(2)), Number(3)) Domyślna implementacja tostring, equals i hashcode Sum(Sum(Number(1), Number(2)), Number(3)) Sum(Number(1), Number(2)) == Sum(Number(1), Number(2)) Akcesory do wartości przekazanych w konstruktorze

40 40 Dopasowywanie wzorców Przykład def eval(e: Expr): Int = e match { case Number(x) => x case Sum(l, r) => eval(l) + eval(r) Uogólnienie switch na hierarchie klas (metoda każdego obiektu) Dopasowanie odbywa się na podstawie == Dopasowuje pierwszą klauzulę zmienne muszą się zaczynać małą literą np. n (odwołania do stałych dużą np. N, wyjątki true, false i null) każda zmienna może być użyta tylko raz, nie można Sum(x,x) wildcard _ (dopasowuje wartość, ale nie dowiązuje do nazwy) Jak nic się nie dopasuje to wyjątek MatchError

41 Przykład wyliczania eval(sum(number(1), Number(2))) -> (by rewriting the application) Sum(Number(1), Number(2)) match { case Number(n) => n case Sum(e1, e2) => eval(e1) + eval(e2) -> (by rewriting the pattern match) eval(number(1)) + eval(number(2)) -> (by rewriting the first application) Number(1) match { case Number(n) => n case Sum(e1, e2) => eval(e1) + eval(e2) + eval(number(2)) -> (by rewriting the pattern match) 1 + eval(number(2)) ->* > 3 41

42 42 Dopasowywanie wzorców jako metoda hierarchii Nie ma problemu abstract class Expr { def eval: Int = this match { case Number(n) => n case Sum(e1, e2) => e1.eval + e2.eval

43 43 Anonimowa funkcja wyrażenia case można używać bez funkcji match { case P1 => E1... case Pn => En jest to skrót dla funkcji anonimowej (x => x match { case P1 => E1... case Pn => En )

44 44 Obiekty zamiast importów statycznych object Sum { def apply(e1: Expr, e2: Expr) = new Sum(e1, e1) i teraz możemy pisać Sum(x,y) zamiast new Sum(x,y)

45 45 Dalszy lukier syntaktyczny Zamiast ((x,y)=>x+y)) można pisać (_ * _) kolejne _ reprezentują kolejne parametry funkcji

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje

Bardziej szczegółowo

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

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

Scala. Obiektowo-funkcyjny język programowania. Zbyszek Skowron 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

Bardziej szczegółowo

Platformy Programistyczne Podstawy języka Java

Platformy Programistyczne Podstawy języka Java Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Przygotował: Jacek Sroka 1 Programowanie obiektowe Wykład 3 Java podstawy Przygotował: Jacek Sroka 2 Przypomnienie Analiza, projektowanie, programowanie, testowanie, wdrażanie Iteracyjnie nie kaskadowo

Bardziej szczegółowo

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

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop. 2016 Spis treści Przedmowa 1 Stosowana notacja 1 1. Wprowadzenie 3 1.1. Konsola interaktywna języka Scala 3 1.2. Zmienne 5 1.3. Wartości

Bardziej szczegółowo

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

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie Języki Programowania II Wykład 3 Java podstawy Przypomnienie Analiza, projektowanie, programowanie, testowanie, wdrażanie Iteracyjnie nie kaskadowo Przypadki użycia = opowiastki o używaniu systemu = wymagania

Bardziej szczegółowo

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

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment

Bardziej szczegółowo

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Klasy abstrakcyjne, interfejsy i polimorfizm

Klasy abstrakcyjne, interfejsy i polimorfizm Programowanie obiektowe 12 kwietnia 2011 Organizacyjne Klasówka będzie 20 IV 2011. Sale jeszcze są pertraktowane. Materiał do wyjątków włącznie. Można mieć swoje materiały nieelektroniczne. Wywołanie z

Bardziej szczegółowo

Java Język programowania

Java Język programowania Java Język programowania Język Java Bazuje i jest zbliżony do C/C++ Porosty zbiór typów danych (podział na typy prymitywne i obiektowe) Zarządzanie pamięcią i Garbage Collection Zintegrowana synchronizacja

Bardziej szczegółowo

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017 Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania

Bardziej szczegółowo

Dziedziczenie. dr Jarosław Skaruz

Dziedziczenie. dr Jarosław Skaruz Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com Dziedziczenie specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami,

Bardziej szczegółowo

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

Enkapsulacja, dziedziczenie, polimorfizm

Enkapsulacja, dziedziczenie, polimorfizm 17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja

Bardziej szczegółowo

Polimorfizm. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

KOTLIN. Język programowania dla Androida

KOTLIN. Język programowania dla Androida KOTLIN Język programowania dla Androida Historia Kotlin został opracowany przez firmę JetBrains Prace rozpoczęto w 2011 r., od 2012 r. dostępny na licencji Apache 2. Nazwa pochodzi od wyspy koło Petersburga

Bardziej szczegółowo

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) MAS dr. Inż. Mariusz Trzaska Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) Zagadnienia o Podstawy o Kontrolowanie sterowania o Klasy o Interfejsy o Obsługa błędów o Pojemniki o System

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Język programowania Ruby Marcin Młotkowski 12 kwietnia 2018 Plan wykładu 1 Wstęp 2 Typy numeryczne Łańcuchy znaków (klasa String) Przedziały Tablice i tablice asocjacyjne Nazwy

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Definiowanie własnych klas

Definiowanie własnych klas Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka

Bardziej szczegółowo

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

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami

Bardziej szczegółowo

Wykład 6: Dziedziczenie

Wykład 6: Dziedziczenie Wykład 6: Dziedziczenie Dziedziczenie Jeden z filarów obiektowości. Budowa jednej klasy na bazie drugiej, przez dodawanie/przesłanianie jej składowych: nad-klasa klasa bazowa pod-klasa klasa pochodna od

Bardziej szczegółowo

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Podstawowe części projektu w Javie

Podstawowe części projektu w Javie Podstawowe części projektu w Javie Pakiet w Javie to grupa podobnych typów klas, interfejsów i podpakietów. Pakiet w Javie może być wbudowany lub zdefiniowany przez użytkownika. Istnieje wiele wbudowanych

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

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

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Informatyka I Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Dziedziczenie klas

Bardziej szczegółowo

Wykład 7: Pakiety i Interfejsy

Wykład 7: Pakiety i Interfejsy Wykład 7: Pakiety i Interfejsy Plik Źródłowy w Javie Składa się z: instrukcji pakietu (pojedyncza, opcjonalna) instrukcji importujących (wielokrotne, opcjonalne) deklaracji klasy publicznej (pojedyncza,

Bardziej szczegółowo

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe Programowanie i projektowanie obiektowe Klasy i obiekty Paweł Daniluk Wydział Fizyki Jesień 2011 P. Daniluk (Wydział Fizyki) PO w. V Jesień 2011 1 / 13 Typy danych (w Javie) Typy pierwotne typ wartości

Bardziej szczegółowo

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza Akademia ETI Wprowadzenie do programowania w Javie PG Java User Group 1 Dlaczego Java? Najpopularniejszy język programowania obiektowego Łatwy w nauce Dostępny na wiele platform 2 Platformy Java Java Standard

Bardziej szczegółowo

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

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

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

Języki i metody programowania Java INF302W Wykład 2 (część 1) Języki i metody programowania Java INF302W Wykład 2 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 2, część 1 1 Struktura wykładu 1. Identyfikacja

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe III. Refleksja Małgorzata Prolejko OBI JA16Z03 Plan Klasa Class. Analiza funkcjonalności klasy. Podstawy obsługi wyjątków. Zastosowanie refleksji do analizy obiektów. Wywoływanie

Bardziej szczegółowo

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

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

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

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Programowanie funkcyjne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 1 / 25 Paradygmaty programowania Programowanie imperatywne Program

Bardziej szczegółowo

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to

Bardziej szczegółowo

Programowanie w Javie wykład 8 Interfejsy

Programowanie w Javie wykład 8 Interfejsy 1 Programowanie w Javie wykład 8 Interfejsy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 Barteczko, JAVA Uniwersalne techniki programowania,

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6 Instrukcja 6 Laboratorium 8 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji

Bardziej szczegółowo

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

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy PODSTAWOWE ELEMENTY JĘZYKA JAVA TYPY DANYCH, OPERATORY I INSTRUKCJE 1. Definicja klasy, dziedziczenie, implementowanie metod interfejsów class nazwa_klasy //ciało klasy Klasa: przed słowem class moŝe wystąpić

Bardziej szczegółowo

Wstęp do ruby dla programistów javy

Wstęp do ruby dla programistów javy czyli dlaczego java ssie Akademickie Stowarzyszenie Informatyczne 26 lutego 2011 Podstawowe cechy Ruby vs Java Wieloparadygmatowy Imperatywny Typowanie Silne Dynamiczne Otwarte klasy Interpretowany Wszystko

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

1 Atrybuty i metody klasowe

1 Atrybuty i metody klasowe 1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Scala - programowanie obiektowo-funkcyjne

Scala - programowanie obiektowo-funkcyjne Program szkolenia: Scala - programowanie obiektowofunkcyjne Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Scala - programowanie obiektowo-funkcyjne Scala-Scala Scala developerzy

Bardziej szczegółowo

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

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

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

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego: Typy klasowe (klasy) 1. Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą obiektów

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

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

Języki i metody programowania Java. Wykład 2 (część 2) Języki i metody programowania Java INF302W Wykład 2 (część 2) Autor Dr inż. Zofia Kruczkiewicz 1 Struktura wykładu 1. Identyfikacja danych reprezentowanych przez klasy podczas opracowania koncepcji prostego

Bardziej szczegółowo

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 3: Tworzenie i usuwanie obiektów 3/10/2013 S.Deniziak: Programowanie obiektowe - Java 1 Deklaracje pól klasy class Klasa1 { int i; Klasa2 k = new Klasa2(); char c= x ; byte

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 3 i 4 - przypomnienie wiadomości o OOP na przykładzie Javy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 8 marca 2017 1 / 20 mgr inż. Krzysztof Szwarc

Bardziej szczegółowo

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

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo

Bardziej szczegółowo

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

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

Tworzenie aplikacji w języku Java

Tworzenie aplikacji w języku Java Tworzenie aplikacji w języku Java Wykład 1 Piotr Czapiewski Wydział Informatyki ZUT 2 października 2009 Piotr Czapiewski (Wydział Informatyki ZUT) Tworzenie aplikacji w języku Java 2 października 2009

Bardziej szczegółowo

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7 Instrukcja 7 Laboratoria 9, 10 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji

Bardziej szczegółowo

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

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik

Bardziej szczegółowo

KLASY, INTERFEJSY, ITP

KLASY, INTERFEJSY, ITP KLASY, INTERFEJSY, ITP ZAGADNIENIA: Klasy, modyfkatory dostępu, pakiety. Zmienne i metody statyczne. Klasy abstrakcyjne, dziedziczenie. Interfejsy. Komentarze i javadoc, http://th-www.if.uj.edu.pl/zfs/ciesla/

Bardziej szczegółowo

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

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Klasy i obiekty cz II

Klasy i obiekty cz II Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Klasy i obiekty cz II Hermetyzacja, mutatory, akcesory, ArrayList Rozwijamy aplikację Chcemy, aby obiekty klasy

Bardziej szczegółowo

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Programowanie RAD Delphi

Programowanie RAD Delphi Programowanie RAD Delphi Dr Sławomir Orłowski Zespół Fizyki Medycznej, Instytut Fizyki, Uniwersytet Mikołaja Kopernika w Toruniu Pokój: 202, tel. 611-32-46, e-mial: bigman@fizyka.umk.pl Delphi zasoby Aplikacje

Bardziej szczegółowo

Przygotował: Jacek Sroka. JNP 3 język Scala

Przygotował: Jacek Sroka. JNP 3 język Scala 1 JNP 3 język Scala 2 Czemu Scala? Język wzorowany na Javie i Haskelu nowoczesny obiektowy język programowania jednocześnie język funkcyjny Programy uruchamiają się na JVM można swobodnie odwoływać się

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna

Kurs programowania. Wykład 9. Wojciech Macyna Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

Bardziej szczegółowo

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm Programy w Javie składają się z pakietów Pakiety zawierają definicje

Bardziej szczegółowo

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie 1. Cel ćwiczenia i zakres Poznanie środowiska IntelliJ IDEA Maven narzędzie do budowanie projektów typy podstawowe i tablice, instrukcje warunkowe,

Bardziej szczegółowo

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Refleksja Typy anonimowe Wyrażenia lambda Extension methods *LINQ Java jest językiem dynamicznym

Bardziej szczegółowo

Programowanie w Javie - wykład 3

Programowanie w Javie - wykład 3 Pakiety import Klasy dziedziczenie Programowanie w Javie - wykład 3 Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

Klasy abstrakcyjne i interfejsy Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie

Bardziej szczegółowo

Wprowadzenie do języka Java

Wprowadzenie do języka Java WSNHiD, Programowanie 2 Lab. 1 [ część 1 ] Wprowadzenie do języka Java Wprowadzenie Język programowania Java jest obiektowym językiem programowania. Powstał w 1995 i od tej pory był intensywnie rozwijany.

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt

Bardziej szczegółowo

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo