8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

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
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
Selve objektet versus referencen til objektet Nedarvning
09 – Arv og polymorfi i java
Hvordan man skriver koden.
Structs Structs allokeres på stakken Memory-allokering sker ved oprettelse af variabel og ikke ved new Der kan defineres metoder incl. Constructor. Eksempel.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
Delphi og C++ Builder C++ Referencer og pointere.
Forelæsning 3.1 Collections Javas for-each løkke
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Lektion 7 Læsestof: Kopier fra Caranno
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.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
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
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.
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.
C#: Data Typer. 2 Nordjyllands Erhvervakademi Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies,
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Blå gruppe: Søren, Alexander, Torben, Lasse. De 4 vigtige items: - Singelton - Override clone judiciously - Use interfaces only to define type - Prefer.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Forelæsning 7.1 – repetition
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
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.
Variabler, klassevariabler, identitet og lighed, collections
 Jens Bennedsen, 2003Introducerende objektorienteret programmering Exceptions.
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.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
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.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
 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.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
RMS - Record Management System Record Store En Record er et bytearray af vilkårlig størrelse En RecordStore er et antal Records nummerede.
Forelæsning Uge 2 – Torsdag
Parametrisering En kort introduktion.
Præsentationens transcript:

8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Overvej at bruge en ”builder”, i forbindelse med konstruktorer med mange argumenter Telescoping pattern (svært at læse/skrive) JavaBeans pattern (Ulovlig tilstand) Builder pattern Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

public static class Builder { //Påkrævede parametre private final String firstName; private final String lastName; private final String ; // Valgfri parametre – initialiseret til default værdier private final int phoneNumber = -1; (…) private final String address = ””; public Builder(String firstName, String lastName, String ) { this.firstName = firstName; this. lastName = lastName; this. = ; } public Builder phoneNumber(int number) { phoneNumber = number; return this; } (…) public Builder address(String address) { address = address; return this; } public FaceBookUser build() { return new FaceBookUser(this); } Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

public class FaceBookUser { private final String firstName; private final String lastName; private final String ; private final int phoneNumber = 0; (…) private final String address = ””; public static class Builder { (…) } private FaceBookUser(Builder builder) { firstName = builder.firstName; lastName = builder.lastName; = builder. ; phoneNumber = builder.Phonenumber; (…) address = builder.address; } FaceBookUser user1 = new FaceBookUser.Builder(“Nikolaj”, “Lund”, ).build(); Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics Extensible Enums? - Det er ikke muligt at 'extende' Enums i java. - Men man kan efterligne effekten med Interfaces! public interface Numerals { public Boolean mayPrecede(int value); public Boolean mayTripple(); }

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics public enum RomanNumerals implements Numerals { I(1) {public Boolean mayPrecede(int value) { switch(value) { case 1: case 5: case 10: return true; default: return false; } public Boolean mayTripple() { return true; } }, V(5) {public Boolean mayPrecede(int value) { switch(value) { case 1: return true; default: return false; } public Boolean mayTripple() { return false; } }, //....more Roman numerals.... // private int value; private RomanNumeral(int value) { this.value = value; }

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics - Derfor er det smart: - Nu kan alle lave Enums der implementerer dit interface! - Disse Enums vil kunne bruges alle steder hvor det oprindelige Enum er brugt! - HUSK: Når man har implementeret et Interface, behøver man ikke definere en abstrakt metode!

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics ”toString bør returnerer en kortfattet, informativ repræsentation af objektet, der er nem at læse for et menneske.” ”Det er anbefalet at alle subklasser af Object overrider toString.”

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics ”toString bør returnerer en kortfattet, informativ repræsentation af objektet, der er nem at læse for et menneske.” ”Det er anbefalet at alle subklasser af Object overrider toString.” toString i klasse Clock (uden override): Eks: toString i klasse Clock (med public String toString() { return "" + hours + ":" + minutes + ":" + seconds; } System.out.println("The clock is " + clock); Eks: The clock is 17:32:53

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics God toString metode: Returnerer alle relevante oplysninger om objektet Godt beskrevet i dokumentationen - Angive format eller ej?

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics God toString metode: Returnerer alle relevante oplysninger om objektet Godt beskrevet i dokumentationen - Angive format eller ej? Angiver format: Eks. Clock klassens toString: hh:mm:ss Fordel: Standard output, som alle forstår Ulempe: Man binder sig til formatet Udelader format: Giver mulighed for at ændre i / tilføje til formatet i senere releases (bør angives i dokumentation)

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics Gør livet lidt lettere for folk der bruger dine klasser. Gør koden mere læsevenlig

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked Exception Runtime Exception Error Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked Exception Runtime Exception Error Ikke- Exception, Runtime Exception, Error Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked Exception Runtime Exception Error Ikke- Exception, Runtime Exception, Error Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked Exception Runtime Exception Error Ikke- Exception, Runtime Exception, Error Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked - Brug checked exceptions når situationen kan reddes - Brug unchecked exceptions når der er programmeringsfejl Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Throwables Checked vs Unchecked Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics - situationen kan reddes der er programmeringsfejl -

Throwables Checked vs Unchecked Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics - Brug checked exceptions når situationen kan reddes

Throwables Checked vs Unchecked Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics - Brug checked exceptions når situationen kan reddes - Brug unchecked exceptions når der er programmeringsfejl

Throwables Checked vs Unchecked Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics - Brug checked exceptions når situationen kan reddes - Brug unchecked exceptions når der er programmeringsfejl - Alle unchecked exceptions du implementerer bør være subklasse til RuntimeException

Throwables Checked vs Unchecked Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics - Brug checked exceptions når situationen kan reddes - Brug unchecked exceptions når der er programmeringsfejl - Alle unchecked exceptions du implementerer bør være subklasse til RuntimeException - Brug aldrig throwables der ikke er subklasse af enten Exception, RuntimeException, eller Error

Table of contents  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics

Table of contents Foretræk interfaces frem for abstrakte klasser (”mixins”, ikke hierakiske frameworks) Undgå strenge når andre typer er mere passende (”samlede” typer/aggregate types) Brug varargs med omtanke (kun på kald som virkelig opererer på en input-sekvens af variable længde) Foretræk generiske typer (typesikkerhed)  Builder  Enums  toString  Exceptions  Interfaces, Strings, Varargs & Generics