05 – OOP i java Hvordan man skriver koden.
Feb 24, 2016
05 – OOP i javaHvordan man skriver koden.
2NOEA 2009Java-kursus – OPP i Java
Definering af klasser
<modifier> class <name> {
<attributeDeclaration>*
<constructorDeclaration>*
<methodDeclaration>*
} hvor
<modifier> er en access modifier. Kan evt. Kombineres med andre modifiers.
3NOEA 2009Java-kursus – OPP i Java
Eksempel
• public class StudentRecord {//we'll add more code here later
• } public – betyder at klassen kan tilgås af andre klasser
udenfor pakken class - Keyword i Java for at angive at det er en klasse StudentRecord – et entydigt navn for klassen
4NOEA 2009Java-kursus – OPP i Java
Coding Guidelines
Giv klassen et sigende navn, ikke bare MinKlasse Klasse navn starter, pr. konvention, med stort bogstav. Navnet på filen, hvor klasse ligger SKAL hedde det samme
som klassen. Der kan være flere klasser i en fil, men kun een public
5NOEA 2009Java-kursus – OPP i Java
Instans variable (attributter) vs. klasse (static) variable Instans variable
Tilhører en objekt instans Værdien af en variabel i et objekt er forskellig for værdien i
et andet objekt Klasse variable (static variable)
Variable der tilhører hele klassen Det betyder at de har samme værdi for alle objekter af
klassen
6NOEA 2009Java-kursus – OPP i Java
Klasse variable
7NOEA 2009Java-kursus – OPP i Java
Erklæring af attributter
<modifier> <type> <name> [= <default_value>];
8NOEA 2009Java-kursus – OPP i Java
Instans variable
public class StudentRecord { // Instance variablesprivate String name;private String address;private int age;private double mathGrade;private double englishGrade;private double scienceGrade;private double average;
//we'll add more code here later}
private betyder at variablen kun kan tilgås indefra klassen
9NOEA 2009Java-kursus – OPP i Java
Coding Guidelines
Erklær alle instans variable lige efter “public class MinKlasse {“ Erklær en variabel på en linie. Instans variable bør ligesom andre variable starte med lille
forbogstav. Brug en passende datatype for hver variabel, der erklæres. Erklær instans variable (attributter) som private så det kun er
instans metoder der direkte kan tilgå dem (indkabsling).
10NOEA 2009Java-kursus – OPP i Java
Klasse (static) variable
private static int studentCount;
Brug static til at erklære en static variabel
11NOEA 2009Java-kursus – OPP i Java
Erklær metoder
<modifier> <returnType> <name>(<parameter>*){ <statement>*}
<modifier> f.eks public og static <returnType> kan være alle datatyper (inkl. void) <name> navn på metoden <parameter> ::= <parameter_type> <parameter_name>[,]
12NOEA 2009Java-kursus – OPP i Java
Accessor (Getter) Metoder
• Bruges til at aflæse værdier fra attributter (instans / static variable)
• Skrives somreturnType get<NameOfInstanceVariable>
13NOEA 2009Java-kursus – OPP i Java
public class StudentRecord {private String name;
:public String getName(){
return name;}
}
Eksempel: Get metode
• public – metoden kan kaldes af objekter udenfor klasssen• String – retur typen• getName – metodens navn• () – ingen parametre til metoden
14NOEA 2009Java-kursus – OPP i Java
• Det behøver ikke være simpel aflæsning
public double getAverage(){double result = 0;result=(mathGrade+englishGrade+scienceGrade)/3;return result;
}
15NOEA 2009Java-kursus – OPP i Java
Mutator (Setter) Metoder
• Bruges til skrive / ændre værdien af attributter (instans/static). void set<NameOfInstanceVariable>
16NOEA 2009Java-kursus – OPP i Java
Eksempel: Mutator (Setter) Metode
public class StudentRecord {private String name;
:public void setName( String temp ){
name = temp;}
}
• public – metoden kan kaldes af objekter udenfor klasssen• void – retur typen. void betyder at metoden ikke returner
noget• setName – metodens navn• (String temp) – parameter der bruges inden i metoden
17NOEA 2009Java-kursus – OPP i Java
Flere return statements
Det er muligt at have flere return statements, sålænde de ikke er i den samme blok
Det er dog normalt god programmeringsskik at returnere i bunden
I stedet for variable kan man også returnere konstanter
18NOEA 2009Java-kursus – OPP i Java
Eksempel: Flere return statements
public String getNumberInWords( int num ){String defaultNum = "zero";if( num == 1 ){
return "one"; //return a constant}else if( num == 2){
return "two"; //return a constant}//return a variablereturn defaultNum;
}
19NOEA 2009Java-kursus – OPP i Java
Kan også skrives som
public String getNumberInWords( int num ){String resultNum = "zero";if( num == 1 ){
resultNum = "one"; }else if( num == 2){
resultNum = "two"; }//return a variablereturn resultNum;
}
20NOEA 2009Java-kursus – OPP i Java
Static methods
public class StudentRecord {private static int studentCount;public static int getStudentCount(){
return studentCount;}
}
static – betyder at metoden er static, og skal kaldes med [KlasseNavn].[MetodeNavn]. Metoden kan kun tilgå andre static metoder og variable.
studentCount kan f.eks tælles op i konstruktørenpublic StudentRecord(…) {
studentCount++;..
}}
21NOEA 2009Java-kursus – OPP i Java
Hvornår bruge static metoder?
Når logik og aktuel tilstand ikke involverer et bestemt objekt Beregningsmetoder Math.cos(x)
22NOEA 2009Java-kursus – OPP i Java
Coding Guidelines
Metode navne bør starte med lille forbogstav Metode navne bør starte med verbum (getName, printList) Lav altid dokumentation til metoden. JavaDoc: /**….*/
23NOEA 2009Java-kursus – OPP i Java
Eksempel der bruger StudentRecord klassen
public class StudentRecordExample{
public static void main( String[] args ){
//create three objects for Student recordStudentRecord annaRecord = new StudentRecord();StudentRecord beahRecord = new StudentRecord();StudentRecord crisRecord = new StudentRecord();
//set the name of the studentsannaRecord.setName("Anna");beahRecord.setName("Beah");crisRecord.setName("Cris");
//print anna's nameSystem.out.println( annaRecord.getName() );
//print number of studentsSystem.out.println("Count="+StudentRecord.getStudentCount());}
}
24NOEA 2009Java-kursus – OPP i Java
Program Output
• Anna• Student Count = 3
25NOEA 2009Java-kursus – OPP i Java
Metode overloading
Metode overloading tillader en metode med det samme navn men forskellige
parametre, at have forskellige implementeringer og returnere værdier af forskellige typer
kan bruges når den samme operation har forskellige implementeringer.
Dette gælder for overloadede metoder: samme metode navn forskellige parametre eller forskelligt antal af parametre retur type kan være ens eller forskellig
26NOEA 2009Java-kursus – OPP i Java
Eksempel
public void myprint(){ System.out.println("First overloaded method: Nothing is passed on"); } public void myprint(String name ){ System.out.println("Second overloaded method: Name:"+name); } public void myprint(String name, double averageGrade){ System.out.print("Third overloaded method: Name:"+name+" "); System.out.println("Average Grade:"+averageGrade); }
27NOEA 2009Java-kursus – OPP i Java
Konstruktør
Konstruktøren bliver kaldt lige efter at objektet er oprettet. Den bruges normalt til initialisering.
Konstruktøren har flg. egenskaber: Konstruktører har det samme navn som klassen. En konstruktør uden parametre kaldes default konstruktør Hvis der ikke er implementeret nogle konstruktører, oprettes
automatisk en tom default konstruktør En konstruktør er bare som en almindelig metode, men uden retur
værdi (heller ikke void!) En konstruktør kan ikke kaldes direkte, kun i forbindelse med new. Hvis du har mange overloads af konstruktøren, kan du med fordel
lave en private init metode som kaldes fra de enkelte konstruktører
28NOEA 2009Java-kursus – OPP i Java
Nogle konstruktører
public StudentRecord(){//some initialization code here}public StudentRecord(String temp){this.name = temp;}public StudentRecord(String name, String address){this.name = name;this.address = address;}
29NOEA 2009Java-kursus – OPP i Java
Brug af konstruktører
public static void main( String[] args ){//create three objects for Student recordStudentRecord annaRecord=new StudentRecord("Anna");StudentRecord beahRecord=new StudentRecord("Beah","Philippines");StudentRecord crisRecord=new StudentRecord(80,90,100);
//some code here}
30NOEA 2009Java-kursus – OPP i Java
“this()” constructor call
Det er muligt at kalde en konstruktør indefra en anden konstruktør med this()
this() skal være det første statement i konstruktøren Efter this() kan der komme andre statements
31NOEA 2009Java-kursus – OPP i Java
Eksempel
1: public StudentRecord(){2: this("some string");3: 4: }5: 6: public StudentRecord(String temp){7: this.name = temp;8: }9: 10: public static void main( String[] args )11: {12: 13: StudentRecord annaRecord = new StudentRecord();14: }
32NOEA 2009Java-kursus – OPP i Java
“this” referencen
Referer til objektet selv Bruges mest til at referere instans variable somhedder det
samme som en metode parameter Eksempel:
this.<nameOfTheInstanceVariable>
this kan kun bruges ifm. instans variable og metoder
public void setAge( int age ){this.age = age;
}
33NOEA 2009Java-kursus – OPP i Java
Access Modifiers
Der er 4 typer af access modifiers i Java public (mindst restriktiv) protected (bruges ifm. arv) default (når modifier ikke er angivet.) private (mest restriktiv)
34NOEA 2009Java-kursus – OPP i Java
public
public angiver at klassens medlemmer (variable og metoder) kan tilgås af alle objekter og klasser.
Klassens public medlemmer kaldes også klassens interface(ikke at forveksle med interface keyword)
public class StudentRecord {//default access to instance variable
public int name;//default access to method
public String getName(){return name;
}}
35NOEA 2009Java-kursus – OPP i Java
protected protected angiver at klassens medlemmer kun kan tilgås af
metoder i klassen selv, metoder i klasser i samme package eller af metoder i nedarvede klasser.
Den nedarvede klasse kan være placeret i en anden package.
public class StudentRecord {//default access to instance variable
protected String name;//default access to method
protected String getName(){return name;
}}
36NOEA 2009Java-kursus – OPP i Java
default
Default angiver at det kun er klasser i samme package der har adgang til metoden eller variablen
Der er ikke nogen default modifier keyword.
public class StudentRecord {//default access to instance variable
String name;//default access to method
String getName(){return name;
}}
37NOEA 2009Java-kursus – OPP i Java
private
private angiver at klassens medlemmer kun kan tilgås fra metoder i klassen selv
public class StudentRecord {//private access to instance variable
private String name;//private access to method
private String getName(){return name;
}}
38NOEA 2009Java-kursus – OPP i Java
Java Program Structure:The Access Modifiers
39NOEA 2009Java-kursus – OPP i Java
Coding Guidelines
Instans variable bør normalt erklæres private og tilgås via get og set metoder
Dermed skjules implementation og det muligt at ændre på datarepræsentation uden at skulle de steder hvor variable tilgås