Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Можно ли тут наследовать?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Vaganec Trosti
Отправлено: 12 Февраля, 2017 - 08:11:23
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Привет.

Есть например понятия предметной области Нож и Складной Нож.
Как вы думаете нужно спроектировать классы в этом случае?
PHP:
скопировать код в буфер обмена
  1. class Knife{
  2.   public function cut {/* режем */}
  3. }
  4. class PocketKnife extends Knife{
  5.   private $opened = 0; // 0/1
  6.   // ...
  7.   public function cut {
  8.     if ($this->opened) {
  9.       parent::cut();
  10.     }
  11.   }
  12. }


Нарушит ли это Принцип подстановки Барбары Лисков, или я неверно его понимаю ?
Ведь для объекта Knife постусловия после операции cut() например такие:
- лезвие стало менее острым чем было (изменение атрибута самого объекта)
- разрезаемый объект получил урон.

Но если подменять Knife на PocketKnife, и второй не раскрыт, то он этих постусловий не даст, сузит получается, а в принципе сказано - "Постусловия не могут быть ослаблены в подклассе"
 
 Top
Sail
Отправлено: 13 Февраля, 2017 - 09:28:44
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Vaganec Trosti, Вы же не ограничиваете метод cut().
Вы устанавливаете условие на возможность применения этого метода.
Если метод не применён, то и постусловия его применения остаются за рамками.
 
 Top
Vaganec Trosti
Отправлено: 13 Февраля, 2017 - 13:54:04
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Янв. 2012  


Помог: 0 раз(а)




Клиентский то код метод вызывает. Соотв. и ожидает наверное от него чего то, что указано в базовом классе..
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB