Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/36: Рейтинг темы: голосов - 36, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 30

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

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

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

И так, звучит главный вопрос: в чем же суть интерфейсов, в чем плюсы, в чем минусы?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2012, 21:32
Ответы с готовыми решениями:

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

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

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

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

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

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

Решение

Представь игру 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
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 30
11.06.2012, 23:35  [ТС]
Что ж думаю до меня уже начинает что-то доходить

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

Решение

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

Есть два интерфейса:
  • IСидябельное - то, на что можно сесть.
  • IБросабельное - то, что можно бросить.
Класс Пень реализует интерфейс IСидябельное, поэтому на него можно сесть, но его нельзя бросить.
Класс Топор реализует интерфейс IБросабельное, поэтому его можно бросить, но нельзя на него сесть.
А вот класс Табурет реализует оба интерфейса - на него можно сесть, и его можно бросить.
3
26 / 26 / 1
Регистрация: 30.09.2011
Сообщений: 196
12.06.2012, 14:20
И так, звучит главный вопрос: в чем же суть интерфейсов, в чем плюсы, в чем минусы?
У интерфейсов нет плюсов и минусов - их просто не с чем сравнивать.
Либо они спользуются в проекте либо нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2012, 14:20
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru