apt-get_mebeer
Новичок
Как бодрость духа?
Начал изучать ООП более детально. Возник вопрос насчет композиции, набросал небольшой код:
Точка доступа не может существовать без клиента.
Банковские реквизиты клиента, аналогично.
Я правильно понял композицию? Или же в данном случае это агрегация если утверждать что в композиции один класс от другого не зависит. Всем спасибо заранее.
Начал изучать ООП более детально. Возник вопрос насчет композиции, набросал небольшой код:
PHP:
<?php
/*
* Класс для работы с точками доступа клиента (HotSpot)
*/
class Points {
public function __construct() {
//pass
}
/**
* Метод возвращает количество активных точек для указанного клиента
* @param <type> $clientID
* @return <array()>
*/
public function getCountActivePointsByClientID($clientID) {
$sql = "
select count(id) from points where client_id = {$clientID} and is_deleted = false
";
return $this->db->executeOne($sql);
}
}
/*
* Класс для работы с банковскими реквзитами клиента
*/
class ClientAccountingDetails {
public function __construct() {
//pass
}
/**
* Метод проверяет, удален ли ИНН клиента
* @param <int> $clientID
* @return <int>
*/
public function getActiveTaxIdentificationNumberByclientID($clientID) {
// тут проверка удален ли ИНН клиента из системы, если удален то такого клиента нельзя удалять с БД пока не удалить ИНН
$sql = "
........
";
$x = $this->db->execute($sql);
if($x == 1) { // не удален
return 1;
} else { // удален
return 0;
}
}
}
class Clients {
private $points;
private $clientAccountingDetails;
private $_clientID;
public function __construct($clientID) {
$this->_clientID = $clientID;
// Создвем наши кубики (коллекцию)
$this->points = new Points();
$this->clientAccountingDetails = new ClientAccountingDetails();
}
public function dropClient() {
// Если у клиента все еще еcть активные точки доступа то не удаляем
$countPoints = $this->points->getCountActivePointsByClientID($this->_clientID);
$activeTaxAccount = $this->clientAccountingDetails->getActiveTaxIdentificationNumberByclientID($this->_clientID);
if ( $countPoints > 0 and $activeTaxAccount == 1) {
// ... ничего не делаем и информируем пользователя о том что клиента нельзя удалять и прекращаем сценарий
} else {
// ... тут уже начинаетс удаление клиента и конец
}
}
}
/*
* Подтип класса Clients (Обычный клиент)
*/
class SampleClient extends Clients {
public function __construct($clientID) {
parent::__construct($clientID);
}
}
/*
* Подтип класса Clients (V.I.P клиент)
*/
class VipClient extends Clients {
public function __construct($clientID) {
parent::__construct($clientID);
}
}
/*
* Ну и наконец само использование этого кода
*/
...
$obj = new SampleClient($clientID);
$obj->dropClient();
...
//и тоже самое
...
$obj1 = new VipClient($clientID);
$obj->dropClient();
...
Банковские реквизиты клиента, аналогично.
Я правильно понял композицию? Или же в данном случае это агрегация если утверждать что в композиции один класс от другого не зависит. Всем спасибо заранее.