Objektorienteret Programmering

Relaterede dokumenter
University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Tree klassen fra sidste forelæsning

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

SWC eksamens-spørgsmål. Oversigt

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

A Profile for Safety Critical Java

Singleton pattern i Java

Test af It-komponent

Klasser og nedarvning

Abstrakte datatyper C#-version

Kursusarbejde 2 Grundlæggende Programmering

DM502. Peter Schneider-Kamp

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Software Construction 1 semester (SWC) Spørgsmål 1

Kursusarbejde 3 Grundlæggende Programmering

Objektorienteret design med arv og polymorfi:

Hvad er Objekter - Programmering

Hvad er et distribueret objekt? Plan Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Specifikation Abstrakt OO OS-API Rev Specifikation. Abstrakt, objektorienteret operativsystem-api

Ugeseddel 4 1. marts - 8. marts

Anvendelse af metoder - Programmering

DANMARKS TEKNISKE UNIVERSITET

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Løsning af skyline-problemet

Metoder Klasser Arv. Operatorer Løkker. Praksis eksempel. Grundlæggende programmering Lektion 3

Forelæsning Uge 3 Mandag

Videregående Programmering for Diplom-E Noter

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

BRP Kursusintroduktion og Java-oversigt

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft

Programmering I Java/C#

Løsningsforslag til Camp Let. Case Beskrivelse: Camp Let

Udvikling af DOTNET applikationer til MicroStation i C#

Lær Python dag 1 - modul 1

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Introduktion til OO* og UML

Database for udviklere. Jan Lund Madsen PBS10107

UML til kravspecificering

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Videregående programmering i Java

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

4 Basal Objekt-orienteret Programmering I.

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Introduktion til ActionScript

Objekt-orienteret programmering uden klasser: Self.

Virkefeltsregler i Java

Casper Fabricius ActiveRecord. O/RM i Ruby on Rails

Transkript:

Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control

Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel: Matrix-klassen Polymorphisme Nedarvning i Java Nedarvning i C++

Lidt om Java Java er et ægte objekt-orienteret programmingssprog som understøtter alle de OO-koncepter vi har brug for i kurset (med flere) Det er ikke begrænset til specifikke OS/miljøer Det er nemt at lære hvis man kender C Det understøtter tråde og netværksprogrammering Det er et af de mest udbredte programmeringssprog på Internettet Det er måske knapt så populært blandt systemfolk (herunder mange ingeniører)...

Lidt om C++ C++ er en OO-overbygning på C ikke et ægte objektorienteret sprog Det er tilgængeligt på alle OS/miljøer (men ikke portabelt) Det er nemt at lære hvis man kender C Det understøtter tråde og netværksprogrammering Det er et af de mest udbredte programmeringssprog på PC-platforme, specielt til system- og applikationsprog. Spilprogrammør? Lær C++ i går!!

Klasser i Java Javas basale syntaks ligner C: int startvalue; int[ ] anarray; int add() { int sum = 0; anarray = new int[10]; switch(startvalue) { case 0: for (int i = 0; i < anarray.length; i++) { sum += anarray[i]; return sum;

Klasser i Java public class SumInt { private int startvalue; // Fields/attributes private int endvalue; private int sum; public SumInt() { startvalue = 0; endvalue = 0; // Constructor // a public method public void setstartvalue(int i) { if ((i >= 0) && (i <= endvalue)) { startvalue = i;

Klasser i Java Alle klasser skal starte med det reserverede ord class: public class SumInt { public betyder at alle kan gøre brug af denne klasse Der må kun være een klasse med det givne navn i en pakke Konvention: sammensatte ord, første bogstav skrives med stort Een klasse een kildefil

Klasser i Java Attributter er individuelle variable som er tilgængelige i hele det givne objekt: private int x; private int y; private Dimension2D dimension; public String title = Skippy ; Attributter kan være objekter Alle metoder i objektet kan læse/skrive i disse variable Tommelfingerregel: private eller protected så vidt muligt

Klasser i Java Constructors er pseudo-metoder der tillader at oprette nye objekter: public SumInt() { startvalue = 0; endvalue = 0; // Constructor Et kald til en constructor ser ud som følger: SumInt si = new SumInt(); Obs! Java har Garbage Collection!

Klasser i Java Metoder er funktioner tilknyttet hvert objekt: public int getx() { return x; private int calculatedimension( Dimension2D newd) { if (dimension.getarea() > newd.getarea()) { dimension.add(newd); return dimension.getarea();

Klasser i Java Alle applikationer skal have en main() metode den virker lige som main() i C class HelloWorldApp { public static void main(string[] args) { System.out.println("Guten Tag Welt!"); Demo: BasicsDemo.java

Oversættelse og kørsel af kode Java kræver en fortolker Java applikationer og applets kompileres først til bytecode, som derefter kan eksekveres på en Java Virtual Machine (JVM)

Oversættelse og kørsel af kode JVM giver porterbarhed JVM giver også (visse) sikkerhedsgarantier

Oversættelse og kørsel af kode JVM tilbyder en virtuel maskin-arkitektur oven på egentlig hardware Programmøren kan gøre brug af et Application Programming Interface, der skjuler de beskidte detaljer såsom hardware-specifik filtilgang osv.

Oversættelse og kørsel af kode Command line kompilering > javac HelloWorldApp.java (giver en.class fil, her HelloWorldApp.class) Command line kørsel > java HelloWorldApp (starter JVM, som med det samme kalder main() )

Eksempel: Matrix-klassen En forsimplet repræsentation af en matrix (som kendt fra lineær algebra), som illustrerer Attributter (adskillige) constructors set and get metoder, private metoder offentlige metoder

Klasser i C++ - header-info #include <iostream> using namespace std; class CRectangle { int *width, *height; public: CRectangle (int,int); ~CRectangle (); int area () {return (*width * *height); ;

Klasser i C++ - constructor og destructor CRectangle::CRectangle (int a, int b) { width = new int; height = new int; *width = a; *height = b; CRectangle::~CRectangle () { delete width; delete height;

Klasser i C++ - Constructor/destructor CRectangle::CRectangle (int a, int b) { width = new int; height = new int; *width = a; *height = b; CRectangle::~CRectangle () { delete width; delete height;

Klasser i C++ - metoder void CRectangle::set_values (int a, int b) { x = a; y = b; int main () { CRectangle rect, rectb; rect.set_values (3,4); rectb.set_values (5,6); cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl; return 0;

Polymorphisme

Polymorphisme Polymorphisme betyder at være i stand til at gøre noget (f.eks. at børste) på mange forskellige objekter (f.eks. hunde), også selv om de ikke nødvendigvis er af samme klasse (f.eks. Puddel, Terrier, KleinerMunsterlander, Labrador, DanskGaardhund, Chihuahua, Collie, SktBernhard, Retriever,...) Forskellige ting giver mening for forskellige objekter; det skal objekterne selv vide; F.eks. får nogle af hundene børstet tænder, mens andre får børstet pels

Polymorphisme - Interfaces I Java implementeres polymorphisme via Interfaces: public interface DynamicSystem { public Vector getresponse(vector u); public void setparameters(double[] p); public boolean isdiscretetime();... Alle dynamiske systemer skal så implementere dette interface, f.eks.: class Filter implements DynamicSystem {... class MagLevTrain implements DynamicSystem {...

Polymorphism - Interfaces Alle klasser som implementerer et interface, for eksempel Brushable, can anvendes som input til en metode der tager en Brushable variabel som input-argument: public void performweeklymaintenance(brushable doggie) { doggie.brushme(); Alle metoder specificeret af interfacet skal implementeres af de pågældende klasser (selv hvis implementationen ingenting gør)

Interfaces i Java List er et interface, men anvendes som en datatype: private List<String> deck;... deck = new ArrayList<String>();... deck.add(somestring);... Collections.shuffle(deck); Enhver klasse der implementerer List kan opfattes som en liste!

Interfaces i Java Interfaces ligner klasser uden funktions-krop: public interface playable { public void play(); public void stop(); public void fastforward(); public void rewind(); public void next(); public void previous(); public String getartist(); public String getrecord(); Ligesom klasser: et interface, en kildefil

Interfaces i Java UML: En klasse der implementerer to interfaces filter Serializable DynamicSystem ActiveBandPassFilter

Nedarvning OK, måske ikke arving...

Nedarvning Nedarvning udtrykker et naturligt hierarki, hvor visse klasser udtrykker fælles egenskaber, og andre trækker på disse egenskaber Superclass: den fælles, mindre specialiserede klasse Subclass: Den afledte, mere specialiserede klasse Java: Hvis der ikke er specificeret en en superclass for en given klasse, er superclass pr. definition Object

Nedarvning

Nedarvning Vector and SquareMatrix er subklasser af Matrix og arver alle public og protected attributter og metoder SymmetricMatrix er en subklasse af SquareMatrix og Matrix, men ikke Vector Et Vector objekt er et Matrix objekt i polymorphismeforstand; men det kan ikke bruges som et SquareMatrix eller SymmetricMatrix objekt Vector har en ny attribut: public int length; og en ny metode public Vector crossproduct(vector b) {...

Nedarvning i Java package linalg; class Vector extends Matrix { public int length; private Vector(Matrix v) { // create a Vector from a Matrix public Vector crossproduct(vector b) { // Fancy formulas, e.g. if((length == 3) && (b.length == 3)) { Matrix Q = new Matrix(3,3); Nedarvet fra Matrix! Q.insertData(-entries[0][2], 0,1); Q.insertData(entries[0][1], 0,2); // etc... Q.insertData(entries[0][0], 2,1); return new Vector(Q.multiply(b)); Returner Vector istedet for Matrix

Nedarvning i C++ class CPolygon { protected: int width, height; public: void set_values (int a, int b){ width=a; height=b; ; class CRectangle: public CPolygon { public: int area () { return (width * height); ; class CTriangle: public CPolygon { public: int area () { return (width * height / 2); ; Arver set_values() samt width og height fra CPolygon

Nedarvning i C++ int main () { CRectangle rect; CTriangle trgl; rect.set_values (4,5); trgl.set_values (4,5); cout << rect.area() << endl; cout << trgl.area() << endl; return 0;

Nedarvning public/protected/private Adgang public protected private Attributter/metoder i objektet selv Attributter/metoder i objekter fra nedarvede klasser Attributter/metoder i andre klasser Ja Ja Ja Ja Ja Nej Ja Nej Nej

Lad os så komme i gang! Det officielle Java klassehierarki kan findes på http://download.oracle.com/javase/6/docs/api Et avanceret udviklingsmiljø: http://www.eclipse.org Hurtigt i gang med Java: http://www.processing.org/ OO programmering (C++) til Arduino: http://arduino.cc/en/hacking/librarytutorial