Diferență între revizuiri ale paginii „Noțiuni avansate de programare obiect-orientată”
De la WikiLabs
Jump to navigationJump to searchLinia 45: | Linia 45: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ... și | + | ... și trei clase extinse: ''Carriage'' |
<syntaxhighlight lang="Java"> | <syntaxhighlight lang="Java"> | ||
public class Carriage extends Vehicle{ | public class Carriage extends Vehicle{ | ||
Linia 65: | Linia 65: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ... | + | ... ''Automobile'': |
<syntaxhighlight lang="Java"> | <syntaxhighlight lang="Java"> | ||
public class Automobile extends Vehicle{ | public class Automobile extends Vehicle{ | ||
Linia 92: | Linia 92: | ||
public String getModel(){ | public String getModel(){ | ||
return model; | return model; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ... și ''Truck'': | ||
+ | |||
+ | <syntaxhighlight lang="Java"> | ||
+ | public class Truck extends Automobile{ | ||
+ | |||
+ | public static final float MAX_VEHICLE_SPEED = 150; | ||
+ | private int maxCargo; | ||
+ | |||
+ | public Truck(String _make, String _model, String _color, int _cylinders, int _maxCargo){ | ||
+ | super(_make, _model, _color, _cylinders); | ||
+ | maxCargo = _maxCargo; | ||
+ | } | ||
+ | |||
+ | public int getMaxCargo(){ | ||
+ | return maxCargo; | ||
} | } | ||
Versiunea de la data 21 august 2012 07:22
Ierarhii de clase
Una din cele mai utile facilități ale unui limbaj orientat obiect, din punct de vedere al ușurinței de a citi și menține o aplicație, este aceea de a crea o ierarhie de clase. Particularitățile unei ierarhii de clase sunt:
- o clasă poate extinde o altă clasă, moștenind din funcționalitatea acesteia din urmă;
- un obiect instanțiat dintr-o clasă B care este extinsă dintr-o clasă A, este în același timp de tip B dar și de tip A (polimorfism).
Moștenire
Conceptul de moștenire este util atunci când programatorul are nevoie de o anumită funcționalitate care parțial este deja implementată într-o alta clasă. Astfel, acele bucăți de program nu mai trebuie reimplementate și testate ci doar completate.
Putem lua ca exemplu o clasă Vehicle:
public class Vehicle{
public static final float MAX_VEHICLE_SPEED = 300;
protected float currentSpeed;
private String name;
private String color;
public Vehicle(String _name, String _color){
name = _name;
color = _color;
}
public void increaseSpeedBy(int _speed){
if(currentSpeed + _speed <= MAX_VEHICLE_SPEED){
currentSpeed += _speed;
}
}
public String getName(){
return name;
}
public String getColor(){
return color;
}
public float getCurrentSpeed(){
return currentSpeed;
}
}
... și trei clase extinse: Carriage
public class Carriage extends Vehicle{
public static final float MAX_VEHICLE_SPEED = 40;
private int horseCount;
public Carriage(String _color, int _horseCount){
super("Carriage", _color);
horseCount = _horseCount;
}
public int getHorseCount(){
return horseCount();
}
}
... Automobile:
public class Automobile extends Vehicle{
public static final float MAX_VEHICLE_SPEED = 250;
private int cylinders;
private String make;
private String model;
public Autombile(String _make, String _model, String _color, int _cylinders){
super("Automobile", _color);
make = _make;
model = _model;
cylinders = _cylinders;
}
public int getCylinders(){
return cylinders;
}
public String getMake(){
return make;
}
public String getModel(){
return model;
}
}
... și Truck:
public class Truck extends Automobile{
public static final float MAX_VEHICLE_SPEED = 150;
private int maxCargo;
public Truck(String _make, String _model, String _color, int _cylinders, int _maxCargo){
super(_make, _model, _color, _cylinders);
maxCargo = _maxCargo;
}
public int getMaxCargo(){
return maxCargo;
}
}