Programare Orientata Obiect

Post on 14-Jan-2016

43 views 3 download

description

Programare Orientata Obiect. Curs 4 Pachete Incapsularea datelor. Continutul cursului. Introducere Platforma Java, Clase si Obiecte Modificatori, Constructori Pachete. Incapsularea datelor. Curs 4. Folosirea lui this Pachete 2.1 Generalitati 2.2 Importul claselor - PowerPoint PPT Presentation

Transcript of Programare Orientata Obiect

04/21/23 Curs 4 1

Programare Orientata Obiect

Curs 4Pachete

Incapsularea datelor

04/21/23 Curs 4 2

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor

04/21/23 Curs 4 3

Curs 4

1. Folosirea lui this2. Pachete

2.1 Generalitati2.2 Importul claselor2.3 Crearea pachetelor

3. Incapsularea datelor4. Conventii de nume

4

C4. This1. Folosirea lui this

class Body {private long idNum;private String name= “empty”;private static long nextID = 0;

Body( ) {idNum = nextID++;

}

Body(String bodyName) {idNum = nextID++; //se executa aceeasi intructiune ca

pentru //primul constructorname = bodyName;

}}

Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);

idNum: name:sun

nextID =

idNum: name: sun

nextID =

idNum:name: earth

nextID =

0empty

1

0Sol

1Earth

1 2

5

C4. This1. Folosirea lui this

class Body {private long idNum;private String name= “empty”;private static long nextID = 0;

Body( ) {idNum = nextID++;

}

Body(String bodyName) {this(); // se apeleaza constructorul de mai susname = bodyName;

}}

Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);

idNum: name:sun

nextID =

idNum: name: sun

nextID =

idNum:name: earth

nextID =

0empty

1

0Sol

1Earth

1 2

6

C4. This1 Folosirea lui this

class Body {private long idNum;private String name= “empty”;private static long nextID = 0;

Body( ) {idNum = nextID++;

}

Body(String bodyName) {idNum = nextID++;this.name = bodyName; //this se refera la clasa curenta

}}

Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);

idNum: name:sun

nextID =

idNum: name: sun

nextID =

idNum:name: earth

nextID =

0empty

1

0Sol

1Earth

1 2

7

C4. This1. Folosirea lui this

class Body {private long idNum;private String name= “empty”;private static long nextID = 0;

Body( ) {idNum = nextID++;

}

Body(String name) {idNum = nextID++;this.name = name; //paramentrul din constructor are acelasi

//nume cu proprietatea}

}

Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);

idNum: name:sun

nextID =

idNum: name: sun

nextID =

idNum:name: earth

nextID =

0empty

1

0Sol

1Earth

1 2

8

C4. This1. Folosirea lui this

class Body {private long idNum;private String name= “empty”;private static long nextID = 0;

Body( ) {idNum = nextID++;

}

Body(String name) {this();this.name = name;

}}

Body sun = new Body( ); Body sun = new Body(“Sol”);Body earth = new Body(“Earth);

idNum: name:sun

nextID =

idNum: name: sun

nextID =

idNum:name: earth

nextID =

0empty

1

0Sol

1Earth

1 2

04/21/23 Curs 4 9

C4. Pachete2.1 Generalitati

– Clasele pot fi grupate in pachete (en. package)

– Clasele din libraria standard Java sunt grupate in pachete, cum ar fi java.lang si java.util

http://docs.oracle.com/javase/7/docs/api/index.html

– Principalul motiv pentru folosirea pachetelor: unicitatea de nume a claselor

• Clase cu acelasi nume pot sa fie grupate in pachete diferite

04/21/23 Curs 4 10

C4. Pachete2.2 Importul claselor

– Exista doua metode de accesare a claselor publice dintr-un alt pachet:

1. Prin folosirea numelui complet al pachetului inaintea numelui clasei:

java.util.Date today = new java.util.Date( );

2. Folosind intructiunea import in partea de sus a fisierelor ce contin codul sursa. In acest caz nu mai este nevoie de folosirea numelui pachetului inainte de numele clasei

Se poate importa doar o clasa din pachet:import java.util.Date;Date today = new Date( );

Se pot importa toate clasele din pachet:import java.util.*;Date today = new Date( );

import javax.swing.*;

public class SampleClass {

MenuEvent c;

}%> javac SampleClass.java

MenuEvent este o clasa din pachetul javax.swing.event, care se gaseste in pachetul javax.swing. Pentru a se compila e nevoie si de: import javax.swing.event.*;

SampleClass.java:4: cannot find symbolSymbol : class MenuEventLocation: class SampleClass MenuEvent c; ^1 error

C4. Pachete2.2 Importul claselor

– Instructiunea import faciliteaza accesul doar la clasele din pachetul curent, nu si la clasele din sub-pachete

C4. Pachete2.2 Importul claselor

– Ce se intampla in cazul unui conflict de nume?Exemplu:

import java.util.*;import java.sql.*;Date today = new Date( ); //Eroare:java.util.Date

//sau java.sql.Date?

Daca este necesara doar una dintre clase atunci trebuie importata explicit

import java.util.*;import java.sql.*;import java.util.Date;Date today = new Date( ); //

java.util.Date

Daca sunt folosite ambele atunci trebuie folosit numele pachetului inaintea numelui clasei:

import java.util.*;import java.sql.*;java.sql.Date today = new java.sql.Date( );java.util.Date nextDay = new

java.util.Date( );

import java.lang.Math;

public class importTest {double x = sqrt(1.44);

}

%> javac importTest.javaimportTest.java:3: cannot find symbolsymbol : method sqrt(double)location: class importTestdouble x = sqrt(1.44); ^1 error

?Corect: Math.sqrt(1.44);

C4. Pachete2.2 Importul claselor

– In cazul metodelor statice este necesara folosirea numelui clasei

04/21/23 Curs 3 14

C4. Pachete2.3 Crearea pachetelor

– Crearea unui pachet se realizeaza prin scrierea la inceputul fisierelor sursa a instructiunii:

package numePachet;– Instructiunea package actioneaza asupra

intregului fisier sursa la inceputul caruia apare.  – Daca nu este specificat un anumit pachet, clasele

unui fisier sursa vor face parte din pachetul implicit (care nu are nici un nume). In general, pachetul implicit este format din toate clasele si intefetele directorului curent de lucru.

04/21/23 Curs 3 15

C4. Pachete2.3 Crearea pachetelor

• Adaugarea unei clase intr-un pachet:1. Se pune numele pachetului in partea de sus a fisierului sursa:

2. Se pune fisierul in directorul care se potriveste cu numele pachetului:

in fisierul “Employee.java” stocat in directorul “somePath/com/hostname/corejava/”

package com.hostname.corejava;

public class Employee {. . .

}

04/21/23 Curs 4 16

C4. Pachete3. Incapsularea datelor

public class Body {public long idNum;public String name = “<unnamed>”;public Body orbits = null;public static long nextID = 0;

Body( ) {idNum = nextID++;

}

Body(String bodyName, Body orbitsAround) {this( );name = bodyName;orbits = orbitsAround;

}}

Problema: toate campurile sunt “expuse”, putand fi folisite de “toata lumea”

04/21/23 Curs 4 17

C4. Pachete3. Incapsularea datelor• O versiune imbunatatita:

public class Body {private long idNum;private String name = “<unnamed>”;private Body orbits = null;private static long nextID = 0;

Body( ) {idNum = nextID++;

}

Body(String bodyName, Body orbitsAround) {this( );name = bodyName;orbits = orbitsAround;

}}

Problema: cum pot fi accesate campurile?

04/21/23 Curs 4 18

C4. Pachete3. Incapsularea datelor• O versiune imbunatatita cu metode de accesare:

public class Body {private long idNum;private String name = “<unnamed>”;private Body orbits = null;private static long nextID = 0;Body( ) {

idNum = nextID++; }Body(String bodyName, Body orbitsAround) {

this( );name = bodyName;orbits = orbitsAround; }

public long getID() {return idNum;}public String getName() {return name;};public Body getOrbits() {return orbits;}

}

Nota: Campurile idNum, name si orbits sunt read-only din afara clasei.

04/21/23 Curs 4 19

C4. Pachete3. Incapsularea datelor• O versiune cu metode de accesare si metode de

setare:class Body {

private long idNum;private String name = “<unnamed>”;private Body orbits = null;private static long nextID = 0;

//constructori …

public long getID() {return idNum;}public String getName() {return name;};public Body getOrbits() {return orbits;}

public void setName(String newName) {name = newName;}public void setOrbits(Body orbitsAround) {orbits =

orbitsAround;}}

Nota: Campurile name si orbits pot fi modificate prin intermediul metodelor de setare, dar idNum este in continuare read-only.

04/21/23 Curs 4 20

C4. Pachete4 Conventii de nume

– Pachete: incep cu litera mica E.g. java.util, java.net, java.io . . .

– Clase: incep cu litara mare E.g. File, Math . . .

– Variabile, nume de metode si campuri: incep cu litera mica E.g. x, out, abs . . .

– Constante: cu litere mari E.g. PI . . .

– Nume din mai multe cuvinte: fiecare cuvant este scris cu litera mare in afara de primul care poate sa cu litera mare in cazul claselor sau cu litera mica in cazul metodelor

E.g. HelloWorldApp, getName . . .

04/21/23 Curs 4 21

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenire