Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/31: Рейтинг темы: голосов - 31, средняя оценка - 4.87
me.mamba
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 30
1

В чем суть интерфейсов?

11.06.2012, 21:32. Просмотров 6110. Ответов 6
Метки нет (Все метки)

За день я в интернете начиталась столько всего про интерфейсы, что запуталась до нельзя!!!

И так, звучит главный вопрос: в чем же суть интерфейсов, в чем плюсы, в чем минусы?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2012, 21:32
Ответы с готовыми решениями:

Понять суть интерфейсов
Подскажите новичку что то запутался с интерфейсами. Читаю книжку по C# и что то мне кажется...

В чём заключается суть интерфейсов?
Здравствуйте. Объясните, пожалуйста, в чем заключается смысл интерфейса, потому что так как понимаю...

В чем суть операторов << и >>
Здравствуйте. Уважаемые Форумчане, нужна помощь. Имеется следующий код if ((PINB&amp;(1 &lt;&lt;...

В чем суть continue в if-else
код первый. прата глава 7 упражнение 3. оператор continue отсутствует, все прекрасно работает....

Интерфейсы - в чем их суть
В чем суть интерфейсов объясните пожалуйста. Добавлено через 19 минут А если быть точнее, то...

6
DrobyshevAlex
1176 / 1126 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
11.06.2012, 21:51 2
Тут читали?)
Если вы делаете что то, что работает с чем то, вы можете объявить интрфейс что бы бть уверенным что этот объект будет точно содержать данный метод.

Например, вы делаете класс для запуска какого либо модуля.
Вы берёте все модули сайта и вызываете у них функцию например init().
Если кто то хочет написать модуль, он должен написать эту функцию, так как ваш класс будет её вызывать.
для этого вы можете объявить интерфейс IModule который обязует классы который наследуют этот интерфейс иметь данный метод.
Вообщем то это чисто для того что бы программист по запарке не забыл какой то метод прописать в классе, который сразу может и не нужен, но где то в приложении запустится. И потом могут вылезти ошибки.
Так же это гарантирует другим разработчикам, которые захотят что то делать с модулями другими, что те модули содержат метод init() и они могут не боясь его вызывать.
0
me.mamba
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 30
11.06.2012, 22:04  [ТС] 3
Поздравляю, вы запутали меня еще больше :/

Добавлено через 46 секунд
Что ж, спасибо за попытку
0
DrobyshevAlex
1176 / 1126 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
11.06.2012, 23:09 4
Лучший ответ Сообщение было отмечено как решение

Решение

Представь игру MMORPG.
Есть мобы.
Мобы могут бегать, прыгать, драться.
Теперь представь что ты пишешь нового моба для игры.
В игре всех мобов обрабатывают какие то классы, они берут в цикле и перебирают всех мобов вызываю у них функцию обновления. Пусть будет Update().

Просто класс
PHP
1
2
3
4
class Mob
{
    public update() {...}
}
сам по себе класс Update не запустится.
Его запускает что то, например
PHP
1
2
3
4
5
6
7
8
9
10
11
class World
{
    public Update()
    {
         // когда в мире происходит слеюующий кадр, вызываетс я функция обновления.
         // тут в цикле перебираютя все объекты мира и для них вызывается эта функция.
         // тебя взяли на работу в близзард, и ты пишешь моба для дьябло 3
         // но ты по запарке забыл какую либо функцию, ну так как у нас в примере одна она, то 
         // ты забыл молу реализоватьф ункцию Update или опечатался при наборе
    }
}
теперь компилируем игру, и о чудо, ошибок нет, так как функуия будет вызвана только уже во время самой игры когда моб появится на карте.

мы бежим, тут появляется наш моб, и вызывается для него функция Update()!
Но у него нет этой фукнции, ты опечатался при наборе, и игра упала

Теперь представим что тот кто делал класс World решил подстраховаться, он сделал интерфейс с медобом Update() и при добавлении моба в массииу, он проверит, есть ли у моба данный интерфейс?
Если нет, то он выведет в лог ошибку, а моба не добавит в список.
Теперь если ты не указал мобу своиму интерфейс, он просто не добавится в список, а в лог посыпятся ошибки.
Игра не упадёт.
с другйо стороны, если ты указал мобу что у него есть интерфейс IMob но не реализовал функцию или опечатался, то игра даже не скомпилируется, так как комплятор сразу определить что у тебя не реализован такой то метод который есть в интерфейсе. Ты сразу поправишь свою ошибку и все довольны

Добавлено через 12 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
 
interface IMob
{
    public function Update();
}
 
class Dog implements IMob
{
    public function Update()
    {
        echo 'собачка побежала<br/>';
    }
}
 
class Cat implements IMob
{
    public function Update()
    {
        echo 'кошка побежала<br/>';
    }
}
 
class Cow
{
    public function Updat() // ошибка в имени
    {
        echo 'корова побежала<br/>';
    }
}
 
class World
{
    private $mobs = array();
    
    public function addMob(IMob $mob)
    {
        $this->mobs[] = $mob;
    }
    
    public function Update()
    {
        foreach ($this->mobs as $mob)
        {
            $mob->Update();
        }
    }
}
 
$world = new World;
 
$world->addMob(new Dog);
$world->addMob(new Cat);
$world->addMob(new Cow); //корова 
 
for ($i = 0; $i < 5; $i++)
{
    $world->Update();
}
Вот так, ты сразу получишь ошибку, что класс не совпадает.
HTML5
1
Catchable fatal error: Argument 1 passed to World::addMob() must implement interface IMob, instance of Cow given, called in
а если добавишь интерфейс
PHP
1
class Cow implements IMob
То ты получишь новую ошибку
HTML5
1
 Fatal error: Class Cow contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (IMob::Update)
Которая скажет что у тебя в классе Cow нет метода Update

Ну вот так ты не поломаешь игру Так как она даже не стартанёт, пока не исправишь. А если бы небыло проверки.
PHP
1
class Cow
PHP
1
public function addMob($mob)
То код запустится, и будет работать, может сутками, пока не придёт время вызова функции Update, а потом бац
HTML5
1
2
3
собачка побежала
кошка побежала
( ! ) Fatal error: Call to undefined method Cow::Update() in
А если это крупный проект)? типа дьябло или мира варкрафт?) и сервер упал?)
Вот для этого они и нужны.
4
me.mamba
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 30
11.06.2012, 23:35  [ТС] 5
Что ж думаю до меня уже начинает что-то доходить

Спасибо тебе и низкий поклон
0
Vovan-VE
13182 / 6569 / 1039
Регистрация: 10.01.2008
Сообщений: 15,069
12.06.2012, 07:15 6
Лучший ответ Сообщение было отмечено как решение

Решение

me.mamba, Если хотите, еще один пример. Возможно, он не очень звучный, но понятный.

Есть два интерфейса:
  • IСидябельное - то, на что можно сесть.
  • IБросабельное - то, что можно бросить.
Класс Пень реализует интерфейс IСидябельное, поэтому на него можно сесть, но его нельзя бросить.
Класс Топор реализует интерфейс IБросабельное, поэтому его можно бросить, но нельзя на него сесть.
А вот класс Табурет реализует оба интерфейса - на него можно сесть, и его можно бросить.
3
caballero
26 / 26 / 1
Регистрация: 30.09.2011
Сообщений: 196
12.06.2012, 14:20 7
И так, звучит главный вопрос: в чем же суть интерфейсов, в чем плюсы, в чем минусы?
У интерфейсов нет плюсов и минусов - их просто не с чем сравнивать.
Либо они спользуются в проекте либо нет.
0
12.06.2012, 14:20
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2012, 14:20

В чем суть PHP?
Ребят, подскажите пожалуйста правильно ли я понял суть PHP. Вот лежит на сервере код определенный....

Указатели - в чем суть?
Кто нибидь может мне обястнить укасзатели в С++,ато я некак не врубаюсь.

подскажите в чем суть программы?
решение дифференциального уравнения? clc;clear;close all; global n Wp = tf(,) = tfdata(Wp,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.