Indledende Programmering Uge 6 - Efterår 2006

Slides:



Advertisements
Lignende præsentationer
Hvordan programmerer man?? STREAM - en model. Programmører arbejder ofte i teams Hver programmør arbejder på sin del af en større helhed.
Advertisements

Velkommen til Softwarekonstruktion
Et projekt til undersøgelse af udviklingsmetodologi.
07 – Kort om OO Introduktion.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Selve objektet versus referencen til objektet Nedarvning
Grundlæggende programmering Efterår 2001
Objektorienteret programmering
Hvordan man skriver koden.
Tietgen Skolen Trick med facadeklasse og serialisering ”Trick” – model ”samles” til eet overordnet objekt Alle klasser i model skal have attriutten [Serializable]
Programklasser for bladhus Den efterfølgende beskrivelse er ikke komplet. Der er ikke taget afsæt i use cases, sekvensdiagrammer og operationsbeskrivelser.
Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
Objektorienteret programmering
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
18 – Java Server Faces. 2 NOEA2009Java-kursus – JSF 2 Web-applikationer - 1 Brugere interagerer med en Web-browser Browseren sender forespørgsler til.
Aspekt-orienteret programmering (AOP) Lars Christensen Daniel Simonsen.
Fundamentale datastrukturer
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
Procestræ under afvikling af cp init login shell cp cp src dest.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Forelæsning 2.2 Tilstand og opførsel (repetition)
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Hvad består en distribueret applikation af ? Processer der kører på hver deres maskine Tråde - 1 eller flere "letvægtsprocesser" per proces Objekter i.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
Variabler, klassevariabler, identitet og lighed, collections
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Klassevariable- og metoder Tilstand og opførsel på klasseniveau.
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmering1.1 Turtlemaskinen Arkitektur, instruktionssæt og eksempler.
 Jens Bennedsen 2002Objektorienteret systemudvikling Design -> kode Mapning af et klassediagram til kode.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering1B.1 Skildpadder Modeller, objekter og opførsel.
Objektorienteret analyse og design Ó Bennedsen 2001 Design - part Programmering og systemudvikling Lektion 7 Design - part 2.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge46 Ancestor.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering1.1 Skildpadder Modeller, objekter og opførsel.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
Klassevariable- og metoder Funktionalitet på klasseniveau.
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge44 Java til Lingo Klasser, statements og lister.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Klasser og objekter (Afsnit i manualen).
Parametrisering En kort introduktion.
Præsentationens transcript:

Indledende Programmering Uge 6 - Efterår 2006 Design af klasser Susanne Lindros

Plan for i dag Design af Klasser / programkvalitet Refaktorering Dubleret kode Kvalitetsegenskaberne kobling og binding Bedre kobling gennem indkapsling Bedre kobling og binding gennem ansvarsfordeling Refaktorering Optællingstyper (enum) Klasse metoder herunder main() Gennemgående eksempel World of Zulu

Design af klasser / programkvalitet Programmer af god kvalitet er bl.a. Lette at vedligeholde Lette at udvide Lette at teste Dvs. programmerne er: Løst koblede (loose coupling) Stærkt bundne/stærkt sammenhængende (high cohesion)

Klassediagram for World of Zuul

Dubleret kode Når den samme kodeblok forekommer flere steder i et program, kaldes det dubleret eller redundant kode Dubleret kode er tegn på dårligt design, og skal undgås (Hvorfor det?)

Kobling Begrebet kobling beskriver samspillet mellem klasser Vi tilstræber løs kobling (loose coupling) Dvs. klasserne skal være så uafhængige af hinanden som muligt og kun kommunikere med hinanden via en lille veldefineret grænseflade Stærk kobling = høj afhængighed og medfører at der skal rettes mange steder når der sker ændringer

Binding Begrebet binding beskriver i hvilken grad programmets moduler (klasser og metoder) løser én og kun én klart defineret opgave Vi tilstræber stærk binding (high cohesion) Dvs. hvert modul har en klart defineret opgave og et klart defineret ansvarsområde Det medfører at modulerne er Lette at læse Lette at rette Lette at genbruge

Indkapsling Indkapsling er med til at skabe løs kobling Kun klassens Interface skal være synligt udefra, dvs. hvilke metoder klassen tilbyder og hvordan de anvendes Felter bør altid erklæres private Al tilgang til klassens data er klassens eget ansvar og bør kun ske i klassens egne metoder

Fordeling af ansvar (Responsibility-driven design) Hver klasse skal have et klart defineret ansvarsområde skal kun være ansvarlig for én type entiteter Hver klasse skal være ansvarlig for at lagre og manipulere sine egne data Klassen må gerne bede andre om hjælp, men bevarer selv ansvaret for hvad der sker Medfører løs kobling og stærk binding

Refaktorering Refaktorering er en aktivitet hvor man forbedrer strukturen og koden i et program med henblik på at gøre det lettere at ændre og tilføje ny funktionalitet Refaktorering ændrer ikke ved den aktuelle funktionalitet (kvalitetsforbedrer kun koden) Refaktorering medfører ofte at klasser og metoder deles op

Refaktorering og Test Et sikkert refaktorerings forløb: Gennemfør test der viser at koden virker Tag kopi af koden Refaktorer (lav kvalitetsforbedring) Test igen og kontroller at alt stadig virker Nu er vi parate til at tilføje ny funktionalitet

Optællingstyper (enum) En Java feature med mange muligheder, her kun en introduktion enum definerer en type på samme måde som en klasse Simpel anvendelse - en liste af navne public enum CommandWord { GO, QUIT, HELP, UNKNOWN; } Hvert navn repræsenterer et objekt af optællingstypen (oprettet implicit) F.eks. CommandWord.HELP

Optællingstyper (enum) public enum CommandWord { GO, QUIT, HELP, UNKNOWN; } private String command; private CommandWord commandWord; … if (command.equals(“help”)) commandWord = CommandWord.HELP; if (commandWord == CommandWord.HELP) printHelp();

Klasse Metoder Klasse metoder defineres som static Klasse metoder kan kaldes direkte på klassen, f.eks.: Math.round(3.75); Klasse metoder kan kun tilgå andre klasse elementer (variable og metoder) Klasse metoder kan aldrig direkte tilgå instans variable og ikke-klasse metoder

Afvikling af programmer uden for BlueJ Hvis java-applikationer skal kunne afvikles uden for BlueJ skal de have en main() metode public static void main (String [] args) { … } main() metoden udføres automatisk når vi eksekverer en klasse Alle klasser kan have en main() metode, men ofte findes den kun i applikationens ”start” klasse

”Start” klasse til World of Zuul public class WorldOfZuul { public static void main(String[] args) { Game myGame = new Game(); myGame.play(); }

main() metode i Game klassen public class Game { ... public static void main(String[] args) { Game myGame = new Game(); myGame.play(); }