Programare Orientata Obiect

21
06/17/22 Curs 4 1 Programare Orientata Obiect Curs 4 Pachete Incapsularea datelor

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

Page 1: Programare Orientata Obiect

04/21/23 Curs 4 1

Programare Orientata Obiect

Curs 4Pachete

Incapsularea datelor

Page 2: Programare Orientata Obiect

04/21/23 Curs 4 2

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

Page 3: Programare Orientata Obiect

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

Page 4: Programare Orientata Obiect

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

Page 5: Programare Orientata Obiect

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

Page 6: Programare Orientata Obiect

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

Page 7: Programare Orientata Obiect

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

Page 8: Programare Orientata Obiect

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

Page 9: Programare Orientata Obiect

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

Page 10: Programare Orientata Obiect

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

Page 11: Programare Orientata Obiect

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

Page 12: Programare Orientata Obiect

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

Page 13: Programare Orientata Obiect

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

Page 14: Programare Orientata Obiect

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.

Page 15: Programare Orientata Obiect

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

}

Page 16: Programare Orientata Obiect

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”

Page 17: Programare Orientata Obiect

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?

Page 18: Programare Orientata Obiect

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.

Page 19: Programare Orientata Obiect

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.

Page 20: Programare Orientata Obiect

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

Page 21: Programare Orientata Obiect

04/21/23 Curs 4 21

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