Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


Præsentationer af emnet: "8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java."— Præsentationens transcript:

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

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

3 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

4 public static class Builder { //Påkrævede parametre private final String firstName; private final String lastName; private final String email; // Valgfri parametre – initialiseret til default værdier private final int phoneNumber = -1; (…) private final String address = ””; public Builder(String firstName, String lastName, String email) { this.firstName = firstName; this. lastName = lastName; this.email = email; } 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

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

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

7 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(); }

8 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; }

9 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!

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

11 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.”

12 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: Clock@163b91 toString i klasse Clock (med override): @override public String toString() { return "" + hours + ":" + minutes + ":" + seconds; } System.out.println("The clock is " + clock); Eks: The clock is 17:32:53

13 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?

14 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)

15 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

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

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

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

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

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

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

22 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

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

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

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

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

27 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

28 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

29 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

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

31 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


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

Lignende præsentationer


Annoncer fra Google