|
Devel ↓
|
 |
|
18 Январь, 2012, 02:30:58
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: -1
Сообщений: 29 Сила слова: -3.45
|
Никак не могу разобраться с вопросом: для чего нужны интерфейсы?
И дело не в том, что я хочу поставить под сомнение целесообразность их применения, а в том, что как новичек изучающий синтаксис языка не могу въехать в саму суть использования.
Знаю что интерфейс содержит только абстрактные методы, а наследующий его класс должен реализовать все эти методы.
Только не пойму зачем это нужно, в реальном применении (с интерфейсами ознакомился в двух книгах по php и одной статьей).
Например наследование помогает разработать базовую функциональность в базовом классе и расширять ее в дочерних классах. А с интерфейсами, что то никак не клеиться.
|
|
|
|
|
Записан
|
|
|
|
|
Flare ↓
|
 |
|
18 Январь, 2012, 03:49:35 , спустя 1 час 18 минут 37 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 9
Сообщений: 253 Сила слова: 3.56
|
class User{
private $name;
public function __construct($name) {
$this->name = $name;
}
}
class Article {
private $author;
public function setAuthor (UserInterface $user) { //Первый случай
$this->author = $user;
}
}
class Post {
private $author;
public function setAuthor ($user) { //Второй случай
$this->author = $user;
}
}
$user = new User('Vasya');
$post = new Article();
$post->setAuthor($user); //Первый случай
$post = new Post();
$post->setAuthor($post); //Второй случай
Посмотри на 2 случая, когда заранее указывают какие данные должны прийти setAuthor, и когда не проверяют. Во втором случае ты можешь любой объект передать аргументов и никаких ошибок не будет. Спустя 2 минуты 21 секунду добавил а в первом через интерфейс ограничиваешь. Еще забыл дописать в начале что
interface UserInterface {}
class User implements UserInterface{
private $name;
public function __construct($name) {
$this->name = $name;
}
}
|
|
|
|
|
Записан
|
Если программист в 07.00 утpа на pаботе, значит он там ночевал...
|
|
|
|
Абырвалг ↓
|
 |
|
18 Январь, 2012, 04:37:55 , спустя 48 минут 20 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
пример так себе, никто не мешает написать
setAuthor(User $author)
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
Devel ↓
|
 |
|
18 Январь, 2012, 04:48:41 , спустя 10 минут 46 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: -1
Сообщений: 29 Сила слова: -3.45
|
пример так себе, никто не мешает написать
setAuthor(User $author)
Согласен, на пару минут опоздал, с аналогичным сообщением
setAuthor(User $author)
|
|
|
|
|
Записан
|
|
|
|
|
Flare ↓
|
 |
|
18 Январь, 2012, 04:54:30 , спустя 5 минут 49 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 9
Сообщений: 253 Сила слова: 3.56
|
да пример плохой все-таки и неполный,
в общем если несколько реализаций интерфейса, то тогда бы пример подошел,
смотри на реализацию в php паттерна стратегия там как раз идею с заменой через общий интерфейс
|
|
|
|
|
Записан
|
Если программист в 07.00 утpа на pаботе, значит он там ночевал...
|
|
|
|
Devel ↓
|
 |
|
18 Январь, 2012, 04:59:34 , спустя 5 минут 4 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: -1
Сообщений: 29 Сила слова: -3.45
|
Да тоже не то.
Если даже интерфейс будет реализован дважды: в User и Article, все равно можно обойтись без интерфейса указывая в setAuthor($author) тип объекта User или Article.
|
|
|
|
|
Записан
|
|
|
|
|
Flare ↓
|
 |
|
18 Январь, 2012, 05:05:32 , спустя 5 минут 58 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 9
Сообщений: 253 Сила слова: 3.56
|
User implements UserInterface {}
Doctor implements UserInterface {}
Пост в блог добавляет посетитель сайта или доктор Спустя 2 минуты 53 секунды добавил хотя это уже выкручивание)
|
|
|
|
|
Записан
|
Если программист в 07.00 утpа на pаботе, значит он там ночевал...
|
|
|
|
master ↓
|
 |
|
18 Январь, 2012, 05:10:09 , спустя 4 минуты 37 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
Интерфейс - это описание взаимодействия двух частей программы, двух классов, двух модулей и т.п. Используется при делегировании задачи нескольким людям.
например класс Б используется классом А. класс А пишет один человек, класс Б другой. Чтобы сделать их работу слаженной вначале составляется правило взаимодействия этих классов. таким правилом является интерфейс для класса Б
|
|
|
|
|
Записан
|
|
|
|
|
Devel ↓
|
 |
|
18 Январь, 2012, 05:32:01 , спустя 21 минуту 52 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: -1
Сообщений: 29 Сила слова: -3.45
|
Интерфейс - это описание взаимодействия двух частей программы, двух классов, двух модулей и т.п. Используется при делегировании задачи нескольким людям.
например класс Б используется классом А. класс А пишет один человек, класс Б другой. Чтобы сделать их работу слаженной вначале составляется правило взаимодействия этих классов. таким правилом является интерфейс для класса Б
Кажется начинаю понимать, но все же еще недопонимаю.
Нужен пример, наверно, с ситуацией когда интерфейс просто необходим.
|
|
|
|
|
Записан
|
|
|
|
|
master ↓
|
 |
|
18 Январь, 2012, 05:32:19 , спустя 18 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
в коде:
// интерфейс, пишется архитектором
// описываются типы принимаемых и возвращаемых данных, а также возможные исключения (exceptions)
interface iKeyValue {
/**
* @param $key string
* @return mixed
*/
function getValue ($key);
/**
* @param $key string
* @param $value mixed
* @exception DataWriteErrorException on error
*/
function setValue ($key, $value);
}
// тело программы, пишет Вася
$dataSource = new MemcachedClass;
if (! ($dataSource instanceof iKeyValue )){
throw new Exception ('its expected ' . class($dataSource) . ' implements interface iKeyValue');
}
$dataSource-> setValue('asdf', 123);
print $dataSource-> getValue('asdf');
//класс MemcachedClass, пишет Петя
class MemcachedClass implements iKeyValue {
public function setValue ($key, $value){ ... }
public function getValue ($key){ ... }
}
//класс MySQLKVClass, пишет Яков Иосифович Махерсон
class MySQLKVClass implements iKeyValue {
public function setValue ($key, $value){ ... }
public function getValue ($key){ ... }
}
позже Вася может относительно легко сменить один используемый класс на другой
|
|
|
|
|
Записан
|
|
|
|
|
Status ↓
|
 |
|
18 Январь, 2012, 05:32:35 , спустя 16 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Редкостная сволочь
Группа: Джедаи Карма: 57
Сообщений: 1447 Сила слова: 3.94
|
Интерфейсы придумали бездельники что бы доки не писать, а так они на хуй не нужны:D
|
|
|
|
|
Записан
|
Заткнись говно, я воевал!
|
|
|
|
artoodetoo ↓
|
 |
|
18 Январь, 2012, 06:33:14 , спустя 1 час 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
с особым цинизмом
Группа: в ухо Карма: 124
Сообщений: 3805 Сила слова: 3.26
|
интерфейс это контракт на выполнение некоторого набора действий, а класс это реализация этого контракта. авторитеты ооп пришли к тому, что наследование часто привносит ненужную сложность. а интерфейсы как раз суть того самого "черного ящика", к которому все стремятся.
|
|
|
|
|
Записан
|
|
|
|
|
Devel ↓
|
 |
|
20 Январь, 2012, 12:39:19 , спустя 1 день 6 часов 6 минут 5 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: -1
Сообщений: 29 Сила слова: -3.45
|
Кажется понял.
Все это делается ради вот этого:
позже Вася может относительно легко сменить один используемый класс на другой
А достигается тем, что классы используют прием и возврат данных только с помощью функций:
function getValue($key);
function setValue($key, $value);
Так же как в С++ реализуется интерфейс и используются set() и get() функции (аксессоры) для доступа
|
|
|
|
|
Записан
|
|
|
|
|
kostyl ↓
|
 |
|
20 Январь, 2012, 12:54:16 , спустя 14 минут 57 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
занедельный антипаттерн
Группа: Джедаи Карма: 60
Сообщений: 3526 Сила слова: 1.7
|
Devel, пока запомни как есть, потом поймешь...
|
|
|
|
|
Записан
|
качество жизни обратно пропорционально количеству лени
|
|
|
|
turist_ua ↓
|
 |
|
20 Январь, 2012, 02:45:07 , спустя 1 час 50 минут 51 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 0
Сообщений: 28 Сила слова: 0
|
Через интерфейсы в PHP реализуется множественное наследование.
|
|
|
|
|
Записан
|
|
|
|
|