Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6

Использование интерфейсов в своих проектах

20.01.2019, 22:03. Показов 1198. Ответов 12

Студворк — интернет-сервис помощи студентам
Добрый вечер коллеги!

Тема избита до неузнаваемости.

Одно дело понять и совсем другое осознать.
Осознать для чего нужны интерфейсы.

С теорией всё ясно:

Интерфейс это 100% абстрактный класс не имеющий реализации.
Классы реализующие интерфейс обязуются иметь методы объявленные в интерфейсе иначе - contains 1 abstract method and must therefore be declared abstract or implement the remaining methods

Интерфейс это контракт, шаблон для потомков.


Возникла ситуация реального применения в своих проектах.
Ниже привел диаграмму из своего проекта.

До этого интерфейсы не использовал.

Судя по диаграмме, я правильно применяю концепцию использования интерфейса?

Диаграмма
d.pdf



Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2019, 22:03
Ответы с готовыми решениями:

Использование OpenSource ПО в своих проектах. Распространение внедрённого кода
Если есть, к примеру, какой либо OpenSource проект с открытым исходным кодом. Могу ли я вырвать оттуда куски и поместить их в своё...

Разработка интерфейсов, использование механизма наследования интерфейсов и применение их в программах
Имеется код, необходимо реализовать, и протестировать эти интерфейсы IComparable (сравнимый), ICloneable (клонируемый). Помогите...

Беспроводные джойстики в своих проектах(MAR105c, nrf24 и пр)
Предлагаю обсудить здесь варианты реализации связи игровых контроллеров со своими проектами. Давайте не будем рассматривать здесь...

12
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
20.01.2019, 22:29
Судя по цепочки наследований что-то явно пошло не так
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
20.01.2019, 23:22  [ТС]
Jewbacabra, Что вы имеете в виду?

Уточните пожалуйста, где именно косяк?

Спасибо!
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
20.01.2019, 23:34  [ТС]
Jewbacabra, Если вы о том, почему блог наследует у администратора?
То тут все просто, это код для окружения Admin.

В этом окружении только пользователи окружения Admin.

Всего в проекте 3 окружения.

Admin
Cms
General

Привожу схему ниже.
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
20.01.2019, 23:38  [ТС]
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
20.01.2019, 23:41  [ТС]
Небольшое уточнение по поводу диаграммы в 4 окне

0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.01.2019, 00:02
popryduhin, все это выглядит как наследование ради наследования. Что это за классы, какую задачу решает каждый из классов?
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
21.01.2019, 00:23  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
все это выглядит как наследование ради наследования.
Не совсем так, хотя может быть. Я стараюсь максимально задействовать OOP в проекте.
Выношу каждую сущность в отдельный класс.


Исходя из моего проекта

Model - абстрактный класс.

вот кстати его код
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
abstract class Model
{
    /**
     * @var DI
     */
    protected $di;
    /**
     * @var SafeMySQL
     */
    private $db;
 
    /**
     * @var Config
     */
    protected $config;
    /**
     * @var Load
     */
    protected $load;
    /**
     * @var Logger
     */
    protected $logger;
    /**
     * Управление сессиями
     * @var Session
     */
    protected $session;
 
 
 
    /**
     * Model constructor.
     * @param $di
     */
    public function __construct(DI $di)
    {
        $this->di = $di;
        $this->db = $this->di->get('db');
        $this->config = $this->di->get('config');
        $this->logger = $this->di->get('logger');
        $this->session = $this->di->get('session');
        $this->load = $this->di->get('load');
    }
 
}

что касается конкретно моделей.

Да. Они тоже имеют свою иерархию

Есть блог - блог это отдельная сущность = отдельный класс
Блог в себе содержит что?
Да, правильно посты и рубрики.

Но тут главное не перегибать палку.
Но в целом логично.

Как вы считаете?


Спасибо!

Добавлено через 2 минуты
Пока в классе Blog нет не одной реализации но потом она появится, я не сомневаюсь.

Добавлено через 6 минут
Что это за классы, какую задачу решает каждый из классов?
Это модели, обработка, выборка, добавление данных.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.01.2019, 00:58
Цитата Сообщение от popryduhin Посмотреть сообщение
Я стараюсь максимально задействовать OOP в проекте.
Для чего, чтобы было, или все же есть конкретная цель?
Цитата Сообщение от popryduhin Посмотреть сообщение
Есть блог - блог это отдельная сущность = отдельный класс
Блог в себе содержит что?
Да, правильно посты и рубрики.
"Содержит" не является отношением наследования.
Цитата Сообщение от popryduhin Посмотреть сообщение
Пока в классе Blog нет не одной реализации но потом она появится, я не сомневаюсь.
Т.е в данный момент этот класс не выполняет никакой задачи и следовательно не нужен
Цитата Сообщение от popryduhin Посмотреть сообщение
Это модели, обработка, выборка, добавление данных.
Конкренто каждый класс какую задачу выполняет. И как это отражно в интерфейсе (публичных методах) класса?

В общем - google - объектно ориентированное проектирование, паттерны.
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
21.01.2019, 13:05  [ТС]
Jewbacabra, как раз сейчас этим и занимаюсь.

Добавлено через 1 час 0 минут
Для тех кто ищет ответ, достаточно интересная заметка расположена здесь
https://m.habr.com/ru/post/325478/

Добавлено через 2 минуты
Речь идет о смысловом наследовании.

Добавлено через 1 час 54 минуты
Ещё одна интересная ссылка https://refactoring.guru/ru/design-patterns

Добавлено через 4 часа 57 минут
Jewbacabra, Я всё понял...

сын :
Папа, ну почему я ещё не программист?
Я же уже могу писать программы.
Ну посмотри же на мой код.


папа:
Сын мой, а не всё так просто.
Да - ты можешь писать программы.
Но этого не достаточно для того чтобы быть программистом.

Пришло время познать еще одну истину.
И познать новый виток знаний!

"Паттерны"

Гордо промолвил отец!

Отправлялся в Google!
Познай истину.


сын:
Но как я узнаю что это "Паттерн"?

отец:
"Паттерн" подаст тебе знак!

Добавлено через 4 часа 2 минуты
И всё же. Нужно ответить на вопрос, нужен ли в приведенной схеме интерфейс?

Или же это интерфейс ради интерфейса? )))
1
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
21.01.2019, 13:41
Цитата Сообщение от popryduhin Посмотреть сообщение
Нужно ответить на вопрос, нужен ли в приведенной схеме интерфейс?
Чтобы ответить на этот вопрос, вам нужно понять какие плюсы это дает.
Смысл интерфейса в том, чтобы уменьшить зависимость от конкретной реализации. Вам нужна поддержка разных реализаций? Например сегодня у вас mysql и логи в файл, завтра postgresql и логи в кибану? Или например на проде вы отправляете смс, а в тестах у вас заглушка.
1
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
21.01.2019, 14:26  [ТС]
tarasalk, Спасибо!

Примерно я ожидал похожий ответ.
Вы только подтвердили мои ожидания.

Я не зря в самом начале озвучил
Одно дело понять и совсем другое осознать.
Осознать для чего нужны интерфейсы.
Нужно более детально изучить этот вопрос.

Еще раз спасибо!
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,822
24.01.2019, 18:02
popryduhin, Простой пример, была программа, которая работала на перфокартах. Потом появились магнитные носители. И люди задумались, неплохо было бы, чтобы сама программа не зависела от устройств ввода/вывода и договорились, что каждое устройство должно поддерживать одинаковый набор функций.
Интерфейсы позволяют с легкостью заменять отдельные модули, не затрагивая остальной код. Максимум что вам придется сделать это написать класс, реализующий требуемый интерфейс.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2019, 18:02
Помогаю со студенческими работами здесь

Какой процент возможностей фреймворка используете в своих проектах?
У меня этот процент довольно невысок, где-то не более 25%. Всё потому-что не нахожу применения уйме фичей, которые в нём предусмотрены.

Используете ли вы ViewModelLocator из MVVM Light toolkit в своих проектах?
Доброго всем времени суток, форумчане. Уверен, многие из вас хорошо знакомы с паттерном проектирования MVVM, успешно применяют его на...

Как правильно использовать свой обновляемый проект в других своих проектах
Имеется десяток рабочих проектов, к которым подключаю с помощью reference проект-библиотеку (скопировав его в папку рабочего проекта) и...

Использование ASM в проектах на Си
Привет народ. Прочел тут статейку об использовании ассемблера в языках высокого уровня...

Использование gsl в проектах
Добрый день, есть у кого уже лайф-хаки по использованию стандартной библиотеки gsl, которая якобы идёт уже с последними компиляторами....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru