Top Banner
05 – OOP i java Hvordan man skriver koden.
39

05 – OOP i java

Feb 24, 2016

Download

Documents

jebeli moeen

05 – OOP i java. Hvordan man skriver koden. Definering af klasser. class { * * * } hvor er en access modifier. Kan evt. Kombineres med andre modifiers. Eksempel. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 05  – OOP i  java

05 – OOP i javaHvordan man skriver koden.

Page 2: 05  – OOP i  java

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.

Page 3: 05  – OOP i  java

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

Page 4: 05  – OOP i  java

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

Page 5: 05  – OOP i  java

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

Page 6: 05  – OOP i  java

6NOEA 2009Java-kursus – OPP i Java

Klasse variable

Page 7: 05  – OOP i  java

7NOEA 2009Java-kursus – OPP i Java

Erklæring af attributter

<modifier> <type> <name> [= <default_value>];

Page 8: 05  – OOP i  java

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

Page 9: 05  – OOP i  java

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

Page 10: 05  – OOP i  java

10NOEA 2009Java-kursus – OPP i Java

Klasse (static) variable

private static int studentCount;

Brug static til at erklære en static variabel

Page 11: 05  – OOP i  java

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>[,]

Page 12: 05  – OOP i  java

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>

Page 13: 05  – OOP i  java

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

Page 14: 05  – OOP i  java

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;

}

Page 15: 05  – OOP i  java

15NOEA 2009Java-kursus – OPP i Java

Mutator (Setter) Metoder

• Bruges til skrive / ændre værdien af attributter (instans/static). void set<NameOfInstanceVariable>

Page 16: 05  – OOP i  java

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

Page 17: 05  – OOP i  java

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

Page 18: 05  – OOP i  java

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;

}

Page 19: 05  – OOP i  java

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;

}

Page 20: 05  – OOP i  java

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++;..

}}

Page 21: 05  – OOP i  java

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)

Page 22: 05  – OOP i  java

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: /**….*/

Page 23: 05  – OOP i  java

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

}

Page 24: 05  – OOP i  java

24NOEA 2009Java-kursus – OPP i Java

Program Output

• Anna• Student Count = 3

Page 25: 05  – OOP i  java

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

Page 26: 05  – OOP i  java

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

Page 27: 05  – OOP i  java

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

Page 28: 05  – OOP i  java

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

Page 29: 05  – OOP i  java

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}

Page 30: 05  – OOP i  java

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

Page 31: 05  – OOP i  java

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: }

Page 32: 05  – OOP i  java

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;

}

Page 33: 05  – OOP i  java

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)

Page 34: 05  – OOP i  java

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;

}}

Page 35: 05  – OOP i  java

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;

}}

Page 36: 05  – OOP i  java

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;

}}

Page 37: 05  – OOP i  java

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;

}}

Page 38: 05  – OOP i  java

38NOEA 2009Java-kursus – OPP i Java

Java Program Structure:The Access Modifiers

Page 39: 05  – OOP i  java

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