programare orientata obiect
Post on 14-Jan-2016
45 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
top related