class Train {
private:
int _weight;
int _passengerCount;
std::string _name;
std::string _destination;
public:
const std::string& name() {
return _name;
}
void destination(const std::string& destination) {
_destination = destination;
}
};
Objektově orientované programovaní I
Editovat
Note
|
Zapouzdření, dědičnost, polymorfizmus. Realizace uvedených principů OOP v C++ nebo Javě (podle vlastní volby). PB161/PB162 |
Objektově orientované programování (OOP) je snaha modelovat reálný svět pomocí tříd a jejich instancí čili _objektů.
Zapouzdření
Je princip shlukování dat (proměnných) a funkcionality (funkcí) v jedné jednotce — třídě. Definice třídy udává, které metody a proměnné jsou přístupné zvenku, jsou veřejné.
V C++
V Javě
public class Train
{
private int weight;
private int passengerCount;
private String name;
private String destination;
public String getName() {
return name;
}
public void setDestination(String dst) {
destination = dst;
}
}
Dědičnost
Princip sdílění proměnných a funkcích mezi třídami. Umožnuje modelovat některé vztahy v reálném světě. Vzniká hierarchie tříd.
V C++
struct Vehicle {
int passengerCount;
};
struct Car : public Vehicle {
int wheelCount;
};
struct Truck : public Car {
int capacity;
};
V Javě
class Vehicle
{
int passengerCount;
}
class Car extends Vehicle
{
int wheelCount;
}
class Truck extends Car
{
int capacity;
}
Polymorfismus
Umožňuje se k objektu chovat jako k jeho nadtřídě nebo rozhraní, které implementuje, zejména přistupovat k proměnným a volat funkce. Objekt má více ,,tvarů''.
- Override
-
Nahrazení funkce z nadřazené třídy funkcí novou se stejným názvem.
- Overloading
-
Koexistence vícera funkcí se stejným názvem, ale různými parametry.
V C++
-
Lze overridovat pouze metody označené jako
virtual
. -
Pokud objekt mažeme skrze pointer na nadtřídu, musí destruktor nadtřídy být
virtual
, aby byl objekt správně zničen.
V Javě
-
Lze overridovat pouze instanční metody neoznačené jako
final
.
Abstraktní třídy
Třídy, které nelze instancovat, ale lze z nich dědit.
V Javě je nutno třídu označit jako abstract
stejně jako každou metodu, kterou musí potomek doimplementovat.
V C++ je abstraktní třída taková, která obsahuje alespoň jednu abstraktní metodu. Abstraktní metody mají místo těla = 0;
.