Objektorienteret Programmering

Relaterede dokumenter
class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

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

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

30 Objekt-orienteret Programmering i Andre Sprog.

SWC eksamens-spørgsmål. Oversigt

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

A Profile for Safety Critical Java

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Singleton pattern i Java

Test af It-komponent

Klasser og nedarvning

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

Abstrakte datatyper C#-version

Kursusarbejde 2 Grundlæggende Programmering

DM502. Peter Schneider-Kamp

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

Real-time programming safety in Java and Ada

Introduction til.net remoting i C#

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

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java

Kursusarbejde 3 Grundlæggende Programmering

Objektorienteret design med arv og polymorfi:

Hvilket sprog er hurtigst

Hvad er Objekter - Programmering

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

Java Klasse nedarvninger

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

Ugeseddel 4 1. marts - 8. marts

Forelæsning Uge 6 Mandag

Eksempel: Skat i år 2000

Anvendelse af metoder - Programmering

DANMARKS TEKNISKE UNIVERSITET

Lektion 3. Grundlæggende programmering i VR

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

Løsning af skyline-problemet

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11

Forelæsning Uge 12 Mandag

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

Klasser og objekter. (Afsnit i manualen)

Forelæsning Uge 12 Torsdag

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

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

Datalogi OB, Efterår 2002 OH er, forelæsning 3/ forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Hvilket sprog skal jeg lære?

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

BRP Kursusintroduktion og Java-oversigt

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

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

Forelæsning Uge 5 Mandag

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

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

Forelæsning Uge 3 Mandag

SWC Elementer i klassedefinition

Programmering I Java/C#

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

Udvikling af DOTNET applikationer til MicroStation i C#

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

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

29 Opsamling af Objekt-orienteret Programmering.

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.

Singleton pattern i C#

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Videregående programmering i Java

Vejledende løsninger

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

Indhold Ide:... 1 Udviklingsmiljø:.. 1

Introduction til.net remoting i VB.NET

DM507 Algoritmer og datastrukturer

Programmering i C. Lektion september 2009

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

Modern Concurrency Abstractions for C#

4 Basal Objekt-orienteret Programmering I.

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Introduktion til ActionScript

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Debugging ivs. Praksis eksempel. Assemblies Attributes Dynamic programming. Github. Multithreading. Grundlæggende programmering Lektion 6

Lige siden den elektroniske computers opfindelse i slutningen af 1940, har det været muligt at få en computer til at beregne ting.

Objekt-orienteret programmering uden klasser: Self.

Scripting. Opslag til (Vol. D. Dahlerup. Bemærk. Anvendte bøger: "Sams. og proteiner.

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#.

Virkefeltsregler i Java

Hvilket sprog skal jeg lære?

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter

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