Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afVibeke Markussen Redigeret for ca. et år siden
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
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.