OMO. 6 - Behavioral Design Patterns. Ing. David Kadleček, PhD.
|
|
- Zdeněk Beran
- před 5 lety
- Počet zobrazení:
Transkript
1 OMO 6 - Behavioral Design Patterns Iterator Chain of responsibility Strategy Visitor Observer Template method State Memento Interpreter Příklady Ing. David Kadleček, PhD. 1
2 Creational design patterns Iterator - abstrakce procházení datovové struktury od její implementace Chain of responsibility - vytvoření řetězu komponent, které postupně zpracovávají požadavek Strategy - dynamické změny chování komponenty (nebo jejího algoritmu) v průběhu běhu programu Visitor - oddělení algoritmu od datové struktury na které pracuje Observer - propojení změnu stavu komponenty s komponentami reagujícími na tuto změnu Template method - předepisuje abstraktní metody pro variantní části chování State - implemenace principů stavového automatu pomocí OOP Memento - navrácení objektu k jeho předcházejícímu stavu (undo/redo)
3 Iterátor Při procházení datové struktury jsme pevně svázáni s její implementací. Pomocí iterátoru budeme abstrahovat samotný algoritmus procházení (tzv. iterování) od implementace datové struktury. Klient používá iterátor tak, že pouze řídí procházení datové struktury pomocí metod next() a isdone() (někdy hasnext()), ale vůbec nemusí znát vlastnosti ani implementaci datové struktury. Iterátor si udržuje stav procházení, aktuální položku a je schopen posunout se na další prvek 3
4 Iterátor Container je datová struktura, kterou se snažíme procházet. Container vrací jednotlivé iterátory pomocí kterých může klient tuto datovou strukturu procházet // Container.java public interface Container { Iterator getiterator(); Všechny interátory by měly mít stejné rozhraní s metodami pro posun iterátoru o jeden prvek a metodu vracející jestli existuje další prvek pro pro procházení. Některé iterátory mají ještě metodu remove(), která umožňuje aktuální prvek odebrat. Ne všechny datové struktury umožňují modifikaci v průběhu procházení public interface Iterator { boolean hasnext(); Object next();
5 Iterátor PetRepository je datová struktura na správu dinosaurů, interně je reprezentována přes pole. Vrací iterátor na procházení přes tyto dinosaury. public class PetRepository implements Container { public String pets[] = { "Tyrannosaurus Rex", "Stegosaurus", "Velociraptor", "Triceratops", "Pterosauria", "Ichthyosaur", "Tanystropheus"; public Iterator getiterator() { return new NameIterator(); private class NameIterator implements Iterator { int index = 0; public boolean hasnext() { return index < pets.length; public Object next() { if (hasnext()) { return pets[index++]; return null;
6 Iterátor PetRepository procházíme (iterujeme) pomocí metod next() a hasnext(). public class Client { public static void main(string[] args) { PetRepository pets = new PetRepository(); for (Iterator it = pets.getiterator(); it.hasnext(); ) { String name = (String) it.next(); System.out.println(name); => Tyrannosaurus Rex Stegosaurus Velociraptor Triceratops Pterosauria Ichthyosaur Tanystropheus
7 Iterátor Jako další příklad implementujeme iterátor, který prochází strom, čtyřmi různými způsoby 7
8 Iterátor Obsah konkrétních iterátoru doplníme až po odevzdání DU
9 Iterátor Klient, ze kterého použijeme iterátor => Použití je vždy stejné nehledě na to, jakým způsobem strom procházíme public class BTreeClient { public static void main(string[] args) { BTree<Integer> testtree = setuptree(); //Inorder tree traversal Iterator<Integer> inorderiterator = testtree.getinorderiterator(); while( inorderiterator.hasnext() ) System.out.print(inOrderIterator.next()+"."); //Preorder tree traversal Iterator<Integer> preorderiterator = testtree.getpreorderiterator(); while( preorderiterator.hasnext() ) System.out.print(preOrderIterator.next()+"."); //Postorder tree traversal Iterator<Integer> postorderiterator = testtree.getpostorderiterator(); while( postorderiterator.hasnext() ) System.out.print(postOrderIterator.next()+"."); static BTree<Integer> setuptree(){ BTreeNode<Integer> n6 = new BTreeNode<Integer>(6, null, null); BTreeNode<Integer> n7 = new BTreeNode<Integer>(7, null, null); BTreeNode<Integer> n4 = new BTreeNode<Integer>(4, n6, n7); BTreeNode<Integer> n3 = new BTreeNode<Integer>(3, null, null); BTreeNode<Integer> n12 = new BTreeNode<Integer>(12, n3, n4); BTreeNode<Integer> n8 = new BTreeNode<Integer>(8, null, null); BTreeNode<Integer> n2 = new BTreeNode<Integer>(2, null, n8); BTreeNode<Integer> n11 = new BTreeNode<Integer>(11, null, null); BTreeNode<Integer> n5 = new BTreeNode<Integer>(5, n11, n2); BTreeNode<Integer> n10 = new BTreeNode<Integer>(10, n12, n5); return new BTree<Integer>(n10);
10 Strategy Změna chování (nebo algoritmu) v průběhu běhu programu. Vytváříme tzv. context, který se chová různě podle toho, jakou má aktuálně nastavenou strategii. Strategy se používá, když pro realizaci jednoho tasku, když chceme flexibilně přepínat mezi různými algoritmy. interface Strategy { public void execute(); 10
11 Strategy Máme různé policejní okrsky a pro ně chceme nastvavit různé strategie při kontrole řidičů interface PoliceStrategy { static final int speedlimit = 90; public void execute(int speed); class NicePoliceStrategy implements PoliceStrategy{ public void execute(int speed) { if (speed > speedlimit + 10) System.out.println("Nice police: You will pay fine 50USD"); class HardPoliceStrategy implements PoliceStrategy { public void execute(int speed) { if (speed > speedlimit) System.out.println("Hard police: You will pay fine 50USD"); class LazyPoliceStrategy implements PoliceStrategy{ public void execute(int speed) { if (speed > speedlimit && Math.random() > 0.5) System.out.println("Lazy police: You will pay fine 50USD"); else System.out.println("Lazy police: Let go");
12 Strategy Náš policejní okrsek je reprezentován pomocí Context objektu. public class Context { PoliceStrategy strategy; public void setstrategy(policestrategy strategy) { this.strategy = strategy; public Context(PoliceStrategy strategy){ this.strategy = strategy; public void patrol(int speed){ strategy.execute(speed); public class Client { public static void main(string [] args) { PoliceStrategy hardstrategy = new HardPoliceStrategy(); PoliceStrategy nicestrategy = new NicePoliceStrategy(); PoliceStrategy lazystrategy = new LazyPoliceStrategy(); Context newyorkpolicedepartment = new Context(hardStrategy); newyorkpolicedepartment.patrol(95); Hard police: You will pay fine 50USD Lazy police: You will pay fine 50USD Lazy police: Let go Lazy police: You will pay fine 50USD <= Context czechpolicedepartment = new Context(niceStrategy); czechpolicedepartment.patrol(95); //Does nothing czechpolicedepartment.setstrategy(lazystrategy); czechpolicedepartment.patrol(150); czechpolicedepartment.patrol(150); czechpolicedepartment.patrol(150);
13 Observer Propojení změnu stavu komponenty s komponentami reagujícími na tuto změnu. Objekt nazvaný subject si udržuje seznam objektů observers, které notifikuje pokaždé, když dojde ke změně stavu subjectu. Notofikace probíhá zavoláním metody na observeru. Tento pattern je často používán při implementacu GUI frameworků (MVC pattern) 13
14 Observer Vytvoříme tři různé observers, každý z nich vypisuje stav Subjectu v jiném formátu public class BinaryObserver extends Observer{ public BinaryObserver(Subject subject){ super(subject); public void update() { System.out.println("Binary:" + Integer.toBinaryString(subject.getState())); public class OctalObserver extends Observer{ public OctalObserver(Subject subject){ super(subject); public void update() {System.out.println( "Octal:"+Integer.toOctalString( subject.getstate())); public class HexaObserver extends Observer{ public HexaObserver(Subject subject){ super(subject); public void update(){system.out.println( "Hex:"+Integer.toHexString( subject.getstate()).touppercase()); 14
15 Observer Nadefinujeme abstraktní třídu Observer, která má metodu update() přes kterou notifikuje Subject jednotlivé observers. Třída Subject umožňuje správu observers a při změně stavu všechny notifikuje. public abstract class Observer { protected Subject subject; public abstract void update(); public Observer(Subject subject){ this.subject = subject; this.subject.attach(this); public class Subject { private List<Observer> observers = new ArrayList<Observer>(); private int state; public int getstate() { return state; public void setstate(int state) { this.state = state; notifyallobservers(); public void attach(observer observer){ observers.add(observer); public void notifyallobservers(){ for (Observer observer : observers) { observer.update(); 15
16 Observer Vytvoříme subject a do něj zaregistrujeme tři různé observers. Poté modifikujeme stav subjectu, všechny navázané observers jsou notifikovány a provedou metodu navázanou změnu stavu. public class Client { public static void main(string[] args) { Subject subject = new Subject(); new HexaObserver(subject); new OctalObserver(subject); new BinaryObserver(subject); System.out.println("First state change: 15"); subject.setstate(15); System.out.println("Second state change: 10"); subject.setstate(10); => First state change: 15 Hex String: F Octal String: 17 Binary String: 1111 Second state change: 10 Hex String: A Octal String: 12 Binary String:
17 State Implemenace principů stavového automatu pomocí OOP. Každý stav systému nebo komponenty je realizován mocí objektu State, který má předefinované rozhraní pro realizaci přechodů (transitions) mezi jednotlivými stavu systému. State objekt tedy definuje stav systému a také metody pro přechody. State také může obsahovat kód pro kontrolu preconditions a postconditions. 17
18 State Připomeneme si jak vypadá UML state diagram 18
19 State Naimplementujeme přehrávač na CD. Začnem tím, že nadefinujeme třídu pro reprezentaci CD public class CD { public String name; public byte format; (public fields pro zkrácení kódu) public CD(String name, byte format) { this.name = name; this.format = format; Pak nadefinujeme rozhraní, přes které budeme posouvat náš stavový automat. public interface AudioPlayerState { public void insertcd(audioplayercontext context, CD cd); public CD ejectcd(audioplayercontext context); public void play(audioplayercontext context); public void stop(audioplayercontext context); 19
20 State Nadefinujeme stavy přehrávače. Stavy implementují rozhraní, které jsme definovali na předchozím slide. Pokud stavový přechod nedává smysl, tak se neději nic. Pokud ano, tak stavy provede přenastavení stavu na kontexu. Zde implementujeme stav ready. U metody play() se kontroluje precondition na správný formát CD. public class ReadyState implements AudioPlayerState { public ReadyState(){ System.out.println("Player ready"); public void play(audioplayercontext context) { //Test precondition if (context.getcd()!= null && context.getcd().format > 0) context.setstate(new PlayingState()); else System.out.println("Cannot play this CD"); public CD ejectcd(audioplayercontext context) { context.setstate(new NoCDState()); return context.getcd(); public void stop(audioplayercontext context) { public void insertcd(audioplayercontext context,cd cd){ 20
21 State Pokračujeme pro další dva stavy public class NoCDState implements AudioPlayerState { public NoCDState(){ System.out.println("Player empty"); public void insertcd(audioplayercontext context, CD cd) { context.setstate(new ReadyState()); context.setcd(cd); public CD ejectcd(audioplayercontext context) { return null; public void play(audioplayercontext context) { public void stop(audioplayercontext context) { public class PlayingState implements AudioPlayerState { public PlayingState(){ System.out.println("Player playing"); public void stop(audioplayercontext context) { context.setstate(new ReadyState()); public CD ejectcd(audioplayercontext context) { return null; public void play(audioplayercontext context) { public void insertcd(audioplayercontext context, CD cd) { 21
22 State Vlastní audio přehrávač realizujeme jako context objekt ze state design patternu. public class AudioPlayerContext { CD cd; private AudioPlayerState state; public CD getcd() { return cd; public AudioPlayerContext(){ state = new NoCDState(); public void setcd(cd cd) { this.cd = cd; System.out.println(cd.name); public void setstate(audioplayerstate state) {this.state = state; public void play(){ state.play(this); public void insertcd(cd cd){ state.insertcd(this, cd); public void stop(){ state.stop(this); public void ejectcd(){ state.ejectcd(this); public AudioPlayerState getstate(){ return state; 22
23 State Následující klient ukazuje využití našeho audio přehrávače public class Client { public static void main(string[] args) { AudioPlayerContext player = new AudioPlayerContext(); player.insertcd(new CD("Helena Vondrackova", (byte)-1)); player.play(); //Nothing - precondition player.ejectcd(); //Ejects CD player.insertcd(new CD("Imagine Dragons", (byte)1)); player.play(); player.ejectcd(); //Nothing - invalid state player.stop(); //Stop playing player.ejectcd(); //Ejects CD 23
24 Template method Předepisuje abstraktní metody pro variantní části chování systému. Abstraktní třída implementuje invariantní části chování a pro ty variabilní pak implementuje sekvenci (algoritmus) ve které se volají variantní části chování. Tyto variantní části chování se liší podle toho, která subclass je implementuje. Je zde tedy použit podobný princip jako u inversion of control - tedy místo toho, aby si subcslasses řídili chování, tak to řídí jejich abstraktní předek. 24
25 Template method Implementujeme abstraktní třídu Game, která svým potomkům předepisuje tři metody. Sama pak definuje algoritmus definující pořadí ve kterém se budou volat. Pak nadefinujeme dva konkrétní potomky třídy Game. public abstract class Game { abstract void initialize(); abstract void startplay(); abstract void endplay(); //template method public final void play(){ initialize(); //initialize the game startplay(); //start game endplay(); //end game public class Football extends Game { void endplay() { System.out.println("Football Game Finished!"); void initialize() { System.out.println("Football Game Initialized! Start playing."); void startplay() { System.out.println("Football Game Started. Enjoy the game!"); public class Cricket extends Game { void endplay() { System.out.println("Cricket Game Finished!"); void initialize() { System.out.println("Cricket Game Initialized! Start playing."); void startplay() { System.out.println("Cricket Game Started. Enjoy the game!");
26 Template method Využití pak vypadá následovně public class Client { public static void main(string[] args) { Game game = new Cricket(); game.play(); System.out.println(); game = new Football(); game.play(); => Cricket Game Initialized! Start playing. Cricket Game Started. Enjoy the game! Cricket Game Finished! Football Game Initialized! Start playing. Football Game Started. Enjoy the game! Football Game Finished!
27 Visitor Oddělení algoritmu od datové struktury na které pracuje. Chci do datové struktury přidávat další operace aniž bych ji musel modifikovat (podpora open-closed principu). Realizace patternu je pomocí tzv. double dispatch principu. Elementy datové struktury u kterých chci v budoucnosti přidávat operace, mají metodu accept(visitor) uvnitř které zavolám na vloženém visitoru metodu visitelement(element). Tím předám řízení visitoru a zároveň mu předám referenci na vlastní element, který potřebuju v nové operaci. 27
28 Visitor 28
29 Visitor public interface ComputerPart { public void accept(computerpartvisitor computerpartvisitor); Implementujeme datovou strukturu pro osobní počítač. Do klíčových komponent počítače vložíme metodu accept() pro double dispatch. public class Keyboard implements ComputerPart { public void accept(computerpartvisitor computerpartvisitor) { computerpartvisitor.visit(this); public class Monitor implements ComputerPart { public void accept(computerpartvisitor computerpartvisitor) { computerpartvisitor.visit(this); public class Mouse implements ComputerPart { public void accept(computerpartvisitor computerpartvisitor) { computerpartvisitor.visit(this); public class Computer implements ComputerPart { ComputerPart[] parts; public Computer(){ parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor(); public void accept(computerpartvisitor computerpartvisitor) { for (int i = 0; i < parts.length; i++) { parts[i].accept(computerpartvisitor); computerpartvisitor.visit(this);
30 Visitor Vytvoříme interface pro různé visitory pracující nad komponentami počítače. Implementujeme konkrétní realizaci tohoto visitoru. Tato vypisuje informace o klíčových komponentách na konzoli public interface ComputerPartVisitor { public void visit(computer computer); public void visit(mouse mouse); public void visit(keyboard keyboard); public void visit(monitor monitor); public class ComputerPartDisplayVisitor implements ComputerPartVisitor { public void visit(computer computer) { System.out.println("Displaying Computer."); public void visit(mouse mouse) { System.out.println("Displaying Mouse."); public void visit(keyboard keyboard) { System.out.println("Displaying Keyboard."); public void visit(monitor monitor) { System.out.println("Displaying Monitor.");
31 Visitor public class Client { public static void main(string[] args) { ComputerPart computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); => Displaying Mouse. Displaying Keyboard. Displaying Monitor. Displaying Computer.
32 Chain of responsibility Vytvoření řetězu komponent, které postupně zpracovávají požadavek. Snižuje coupling mezi objektem posílajícím požadavek a objektem přijímající požadavek. Pošlu tedy požadavek a ten je opracováván nebo na něj reagují komponenty. Každá komponenta má nějaký jiný účel nebo řeší jinou doménu problémy. Každá komponenta se rozhoduje jestli má požadavek poslat na další komponentu v pořadí. Tento pattern využívá EDA (Event Drive Architcture) nebo celá řada frameworků, kde je třeba na requets třeba aplikovat různé aspekty nebo naleznout komponentu, která je schopná požadavek odbavit. 32
33 Chain of responsibility 33
34 Chain of responsibility Komponenty, které řeší požadavek můžeme řetězit do lineárních seznamů nebo i stromů 34
35 Chain of responsibility Chceme implementovat logovací systém. Ten vytvoříme pomocí logovacích komponent, kde každá loguje jiný druh informací a které je možné řetězit za sebe. Začneme implementací abstraktní logovací třídy public abstract class AbstractLogger { public static int INFO = 1; public static int DEBUG = 2; public static int ERROR = 3; protected int level; //next element in chain or responsibility protected AbstractLogger nextlogger; public void setnextlogger(abstractlogger nextlogger){ this.nextlogger = nextlogger; public void logmessage(int level, String message){ if(this.level <= level){ write(message); if(nextlogger!=null){ nextlogger.logmessage(level, message); abstract protected void write(string message);
36 Chain of responsibility public class ConsoleLogger extends AbstractLogger { public ConsoleLogger(int level){ this.level = level; Implementujeme jednotlivé logovací komponenty protected void write(string message) { System.out.println("Standard Console::Logger: " + message); public class ErrorLogger extends AbstractLogger { public ErrorLogger(int level){ this.level = level; protected void write(string message) { System.out.println("Error Console::Logger: " + message); public class FileLogger extends AbstractLogger { public FileLogger(int level){ this.level = level; protected void write(string message) { System.out.println("File::Logger: " + message);
37 Chain of responsibility public class Client { private static AbstractLogger getchainofloggers(){ AbstractLogger errorlogger = new ErrorLogger(AbstractLogger.ERROR); AbstractLogger filelogger = new FileLogger(AbstractLogger.DEBUG); AbstractLogger consolelogger = new ConsoleLogger(AbstractLogger.INFO); errorlogger.setnextlogger(filelogger); filelogger.setnextlogger(consolelogger); return errorlogger; public static void main(string[] args) { AbstractLogger loggerchain = getchainofloggers(); loggerchain.logmessage(abstractlogger.info, "This is an information."); loggerchain.logmessage(abstractlogger.debug, "This is an debug level information."); loggerchain.logmessage(abstractlogger.error, "This is an error information."); => Standard Console::Logger: This is an information. File::Logger: This is an debug level information. Standard Console::Logger: This is an debug level information. Error Console::Logger: This is an error information. File::Logger: This is an error information. Standard Console::Logger: This is an error information.
38 Memento Navrácení objektu k jeho předcházejícímu stavu. Design pattern se používá např. pro realizaci undo/redo operací. Pattern se skládá ze tří základních entit: Originator, Caretaker a Memento. Originator je naše komponenta, kterou modifikujeme (měníme její stavy) a chceme mít možnost se k těmto stavům vracet. Tyto změny s naší komponentou provádí Caretaker. Předtím, než Caretaker provede změnu, tak si vyžádá aktuální stav. Ten mu Originator vrátí v objektu Memento. Caretaker si pak udržuje list těchto mement a může se tak vracet k libovolnému stavu. 38
39 Memento 39
Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.
Jakub Klemsa Jan Legerský Objektově orientované programování klemsjak@fjfi.cvut.cz jan.legersky@gmail.com 30. října 2012 návrhový vzor (design pattern) obecné řešení problému, které se využívá při návrhu
OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC
OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational
Návrhové vzory OMO, LS 2014/2015
Návrhové vzory OMO, LS 2014/2015 Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25
Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2009 Radek Kočí Seminář Java Návrhové vzory 1/ 25 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)
20. Projekt Domácí mediotéka
Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý
11.5.2012. Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9
Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií
Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy
Základní pojmy Stromy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Graf uzly hrany orientované / neorientované Souvislý
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
boolean hasnext() Object next() void remove() Kolekce
11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída
Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24
Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Návrhové vzory 1/ 24 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)
Abstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky popište stav paměti
Principy objektově orientovaného programování
Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T
Jazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI October 8, 2014 Motivace Největší využití v programování okenních aplikací a GUI knihoven. Data reprezentujeme pomocí objektů (tříd), máme tedy ucelený pohled na
Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo
Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)
Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová
Struktura třídy, operátory, jednoduché algoritmy, junit 2. cvičení Alena Buchalcevová Cíle cvičení seznámit se s rozhraním (interface) v Javě seznámit se s testováním při vývoji (makety, JUnit) naučit
Úvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
Chain of responsibility
Chain of responsibility Chain of responsibility n Známý jako n Účel q český překlad řetěz(ec) odpovědnosti q umožnit zasílání požadavků (zpráv) neznámým příjemcům q příjemci tvoří frontu è předávají si
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Návrhové vzory Design Patterns
Návrhové vzory Design Patterns doc. Ing. František Huňka, CSc. Ostravská univerzita PřF 1 Definice vzoru Každý vzor popisuje problém, který nastává opakovaně v našem prostředí, a potom popisuje podstatu
RMI Remote Method Invocation
2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient
Programování v Javě I. Leden 2008
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory
public class Karel { private int position; public boolean issmiling; public int getposition() { return position;
Objekty, třídy a hierarchie tříd Interface a abstraktní třídy Dědičnost Message passing Class diagramy a příklady systémů modelovaných pomocí OOP Volba správného přístupu Rozdíl mezi asociací, agregací
Iterator & for cyklus
Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator()
KTE / ZPE Informační technologie
4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší
Programování v Javě I. Únor 2009
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory
Abstraktní třída a rozhraní
Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě
Zapouzdření. Tomáš Pitner, upravil Marek Šabo
Zapouzdření Tomáš Pitner, upravil Marek Šabo Co je zapouzdření Naprosto zásadní vlastnost objektového přístupu, možná nejzásadnější Jde o spojení dat a práce s nimi do jednoho celku - objektu Data jsou
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu
A Tutorial Advances in query languages for similarity-based databases George J. Klir Petr Krajča State University of New York (SUNY) Binghamton, New York 13902, USA gklir@binghamton.edu Palacky University,
Algoritmy a datové struktury
Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Výčtový typ strana 67
Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce
Java a XML. 10/26/09 1/7 Java a XML
Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis
UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické
Třídy, polymorfismus A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Polymorfizmus ~ vícetvarost Polymorfizmus základní vlastnost objektového přístupu základní princip polymorfismu:
Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz
Design Patterns Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz Základní návrhové vzory Kategorie Creational Patterns starají se o vytváření instancí Structural Patterns struktura komponent v
Observer. Klasifikace. Alias. Smysl. Potřeba sledování změn objektu a notifikace. Obdoba systému událostí (C#, Java) vlastními prostředky
Observer Observer Klasifikace Object Behavioral Alias Dependents Publish-subscribe Smysl Zavádí možnost sledování změn u objektu tak, že když objekt změní stav, ostatní objekty na tuto změnu zareagují,
Java - výjimky. private void vstup() throws IOException {... }
Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace
Abstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
SW_12. Vzor Příkaz - Command Vzor Návštěvník - Visitor
SW_12 Vzor Příkaz - Command Vzor Návštěvník - Visitor 1 Problém: Vzor Příkaz - Command Standardní cesta pro vykonání metody je její vyvolání. V některých situacích nejsme schopni řídit načasování (timing)
Teoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
Vzor Továrna - Factory
1 SW_07 Návrhový vzor: Továrna - Factory 1. Jednoduchá továrna - Simple Factory 2. Tovární metoda - Factory Method 3. Abstraktní továrna - Abstract Factory Vzor Továrna - Factory 2 Kontext: při vytváření
Čipové karty Lekařská informatika
Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.
Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky sledujte stav paměti
1. Téma 12 - Textové soubory a výjimky
1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se
Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů
Infrastruktura UML v UML Karel Richta listopad 2011 Richta: B101TMM - v UML 2 Superstruktura UML Směr pohledu na systém dle UML Diagramy popisující strukturu diagramy tříd, objektů, kompozitní struktury,
Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo
Datové typy v Javě Tomáš Pitner, upravil Marek Šabo Úvod k datovým typům v Javě Existují dvě základní kategorie datových typů: primitivní a objektové Primitivní v proměnné je uložena přímo hodnota např.
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Datové struktury. alg12 1
Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou
Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika
Vývoj informačních systémů Architektura, návrh Vzory: Doménová logika Zachman Framework Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented
Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)
Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control) Problém HMVC úvod MVC v určitých aplikacích nedostačující Příklad: webová stránka s widgety Např. kalendář, hodnocení,
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze A0B36PR2 Programování 2 Jan Faigl, 2015 A0B36PR2
Mediator motivace. FontDialog. závislosti mezi jednotlivými ovládacími prvky jsou netriviální
Mediator Mediator motivace FontDialog závislosti mezi jednotlivými ovládacími prvky jsou netriviální Mediator - motivace zná pomůcky, koordinuje interakce místo distribuce chování do jednotlivých pomůcek
Využití OOP v praxi -- Knihovna PHP -- Interval.cz
Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování
Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
1. Programování proti rozhraní
1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní
Objektově orientované programování
Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 7: Objektově
Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce
Interpreter Interpreter Motivace Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce Příklad: zda daný textový řetězec odpovídá nějakému vzoru (match)
Java Výjimky Java, zimní semestr
Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
Projekty pro výuku programování v jazyce Java
JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil
Seminář Java IV p.1/38
Seminář Java IV Seminář Java IV p.1/38 Rekapitulace Deklarace tříd Proměnné, metody, konstruktory, modifikátory přístupu Datové typy primitivní, objektové, pole Dědičnost Řídící konstrukce Podmínky, cykly
Distribuované systémy a výpočty
Distribuované systémy a výpočty X36DSV Jan Janeček Peter Macejko CORBA Common Object Request Broker Architecture - konsorcium OMG (Object Management Group) - standard pro podporu komunikace v DS - pouze
Algoritmizace a programování
Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
3. Třídy. Základní pojmy objektového programování. Třídy
3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat
Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy
OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha
OSGi Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
Modularita. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Modularita Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, xxb36omo 10/2016, Modularita https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
Návrhové vzory. n OO jazyky - široká paleta technických prostředků. n Návrhový vzor. n rozhraní!! n volnější vazby, parametrizace
Návrhové vzory Návrhové vzory n OO jazyky - široká paleta technických prostředků q dědičnost, polymorfismus, šablony, reference, přetěžování,... q problém - jak toto všechno efektivně používat q cíl -
IRAE 07/08 Přednáška č. 1
Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní
Šablony, kontejnery a iterátory
11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array
Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics
1 Parametrizované třídy Generics generické třídy JDK zavádí mimo jiné tzv. parametrizované třídy - generics Úvod 2 podobnost se šablonami (templates) z C++ nejčastěji použité v oblasti knihoven kontejnerového
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);
TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
7. Dynamické datové struktury
7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.
Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi
Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi primitivními a obalovými typy 4. Třídy odkazující sama na
ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33
Stručný obsah Část 1: Zahřívací kolo Kapitola 1 Co je a k čemu je návrhový vzor 33 Kapitola 2 Zásady objektově orientovaného programování 39 Kapitola 3 Co konstruktor neumí (Jednoduchá tovární metoda Simple
Jazyk C# (seminář 6)
Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Seminář Java II p.1/43
Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii
Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006
Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem
Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo
Výchozí a statické metody rozhraní Tomáš Pitner, upravil Marek Šabo Výchozí a statické metody rozhraní Java 8 přidává ohledně metod v rozhraní nové možnosti. Neuvidíme je tedy ve starém kódu a mnozí vývojáři
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi
OOPR_11 1 Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi primitivními a obalovými typy 4. Třídy odkazující
Technologie JavaBeans
Technologie JavaBeans doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Historie Komponentový model Typy komponent
Kód, který se nebude často měnit
Factory Method Úvod - problém Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) car = new