С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75

ООП, взаимодействие объектов классов

28.05.2013, 17:38. Показов 5764. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Перед тем как задавать вопросы напишу. Я понимаю концепцию ООП, понимаю чем отличается класс от объекта класса, знаю что такое инкапсуляция, полиморфизм и наследование...ну и о прочих статических и виртуальных делах читал, все давалась довольна просто. Почему я это написал? Потому что поиски в гугле ответов на похожие вопросы привели к таким ответам - "Иди читай ООП". Ну в принципе правильно, но не кто не дает название книги, и например страницы где надо найти ответ на вопрос (ну или на худой конец стать в дернете). И если меня будете посылать, то пожалуйста адрес указывайте конкретный=).

Так вот я в первые применяю подход ООП к относительно большому проекту. И столкнулся с тем что я не понимаю как правильно организовать взаимодействие классов между собой. Вернее я могу сделать так, что бы оно работало так как мне надо. но при этом понимаю что с точки зрения ООП это неправильно.

К примеру, у меня есть класс1 и класс2, в одном из методов класса1 нужно использовать функционал метода из класса2.
Вот вопрос как это делается правильно, по канонам ООП?

И приведу мой код (все классы будут дописываться очень большим количеством функционала и строчек) :
Есть так сказать index (вообще надо плагин на WP написать):


PHP
1
2
3
4
5
require_once ( '/classes/pptooltip.php' );
require_once ( '/classes/getdatapinpoint.php' );
 
$pptt = new PinPointToolTip();
$pptt->initPinPointToolTip();
Вот класс который будет брать от стороннего сервиса разные данные:
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
class GetDataPinPoint {
 
    // Настройки по умолчанию.
    private $defOptions = array(
        'limit'  => 50,
        'offset' => 0,
    );
 
    // Рабочие (установленные) настройки.
    private $options = array();
 
// Констурктор класса -----------------------------------------------------------------------------
 
    function __construct() {
        $this->options = array_merge( $this->options, $this->defOptions );
    } //__construct
 
// Public function: -------------------------------------------------------------------------------
 
    // Установка опций.
    public function setOptions( $setOptions ) {
        $this->options = array_merge( $this->options, $setOptions );
    }
 
    // Инициализация работы класса.
    public function initGetDataPinPoint() {
    } // initGetDataPinPoint
 
    // GetData() получает данные в формате JSON от PinPoint
    // Затем формирует массив только с нужными объектами.
    public function GetData( $limit, $offset ) {
        $jsonData = file_get_contents( 'http://pin.pn/api/getpopularpins?limit='.$limit.'&offset='.$offset.'' );
        return $jsonData;
    } //GetData
 
// Private function: ------------------------------------------------------------------------------
 
 
} // GetDataPinPoint
Есть класс в котором я хочу реализовать все логику работы плагина:
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
class PinPointToolTip {
 
    function __construct() {
 
    } // __construct
 
// Public function --------------------------------------------------------------------------------
 
    public function initPinPointToolTip() {
        $this->connectHooks(); // Подключаем все необходимые хуки.
    } // initPinPointToolTip()
 
    public function fChangeContent( $content ) {
        $gdpp = new GetDataPinPoint();
        $jsonData = $gdpp->GetData( 50, 0 );
        $arrData = json_decode( $jsonData );
 
        return $content;
    } // fChangeContent ()
 
 
// Private function -------------------------------------------------------------------------------
 
    private function connectHooks() {
        add_filter ( 'the_content', array( $this, 'fChangeContent') );
    } // regHooks()
 
    private function loadScripts() {
 
    } // loadScripts()
 
    private function loadStyle() {
 
    } // loadStyle()
 
} // PinPointToolTip
И вот оно: в методе fChangeContent мне нужно воспользоваться возможностями другого класса. Я сделал так что работает, но практически уверен что это не правильно.
А если у меня классов будет 10, и одному из них нужен функционал 3 других. Как это делается и где про это читается?
Как по мне так удобно бы было работать как например в коде применяется функция json_decode() (я ее просто так написал,и она работает). Но что то мне подсказывает, что это просто меня клонит в сторону процедурного программирования=).
Надеюсь общее направление моих непониманий я задал...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2013, 17:38
Ответы с готовыми решениями:

Взаимодействие классов БД, Модель, Класс от модели (принцип ООП)
Помогите пожалуйста сориентироваться в вопросе (пишу свой движок) И есть недопонимание, так сказать, сомнение У меня есть класс БД, с...

Взаимодействие классов
Только начинаю разбираться во всём этом, поэтому вопрос возможно глупый, но за пол дня сам решения не нашел :( Есть файл index.php ...

взаимодействие классов
Всем добрый вечер. Начал изучать ооп в php и столкнулся с проблемой: Как из класса 1 обратится к методу класса 2, не делая этот метод...

10
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
28.05.2013, 18:24
Цитата Сообщение от _Mikhail_ Посмотреть сообщение
PHP
1
2
3
4
public function GetData( $limit, $offset ) {
        $jsonData = file_get_contents( 'http://pin.pn/api/getpopularpins?limit='.$limit.'&offset='.$offset.'' );
        return $jsonData;
    }
в твоем методе GetData() не используеют нестатичные методы или свойства, а значит метод можно сделать статичным не вызвав ошибку. А если метод может быть статичным, его нужно объявить как статичный. Конкретно в этом примере:
PHP
1
2
3
4
5
6
7
public static function GetData( $limit, $offset ) {
        $jsonData = file_get_contents( 'http://pin.pn/api/getpopularpins?limit='.$limit.'&offset='.$offset.'' );
        return $jsonData;
    }
 
...
        $arrData = json_decode( GetDataPinPoint::GetData( 50 , 0)  );
1
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
28.05.2013, 18:32
Комментарии к классам и методам, лучше писать PHPDoc. Современная среда покажет их так же при разработке, как подсказку
1
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
28.05.2013, 19:25  [ТС]
Окей, я понял в каком ключе нужно продолжать...! Спасибо за ответы, тогда я сейчас засяду и заООПшу что у меня есть и выложу. Ну жду жесткую, но конструктивную критику=).
0
 Аватар для AndreyDyakonov
122 / 120 / 7
Регистрация: 21.04.2013
Сообщений: 615
28.05.2013, 19:38
Цитата Сообщение от _Mikhail_ Посмотреть сообщение
Я сделал так что работает, но практически уверен что это не правильно
Почему? если бы вы хотели слегка видоизменить поведение класса предка.. но из-за одной функции наследовать класс(если я все правильно понял) глупость. Как вариант, можно объявить "суперпредка" который содержит интересующий Вас метод.. Но возможно ли это по логике?
Цитата Сообщение от _Mikhail_ Посмотреть сообщение
Вот вопрос как это делается правильно, по канонам ООП?
Я бы сделал так как Вы сделали
1
5 / 5 / 1
Регистрация: 14.10.2012
Сообщений: 75
28.05.2013, 19:45  [ТС]
Я четко не описал, виноват. В проекте планируется по мимо этих классов еще 4-ре, а классы из примера пополнеют каждый на 10-15 методов. Причем так получается, что один или 2-а метод нужен в одном классе, а другой в другом. Согласен так текстом сложно описывать, поэтому я сейчас накодю...там и всплывут явно все ошибки или не ошибки.
Идея с супер классом...не знаю. Вообще я себе представлял класс как самостоятельную еденицу которую можно спокойно переносить из одного проекта в другой не переделывая его (ну в идеале конечно=) ).
0
 Аватар для AndreyDyakonov
122 / 120 / 7
Регистрация: 21.04.2013
Сообщений: 615
28.05.2013, 19:53
Цитата Сообщение от _Mikhail_ Посмотреть сообщение
Идея с супер классом...не знаю
собираете эти еще 4 класса смотрите их общие методы и делаете для них общего предка. это будет по ооп.. конечно опять же нужно смотреть по логике..

Не по теме:

а самодостаточность я бы забросил куда подальше.. если оптимизировать разработку, то нужно использовать jquery и еще какой-нибудь фреймворк. И все, - нет самодостаточности! Хотя если работать в одном фреймвоке - прокатит

0
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
28.05.2013, 19:55
Цитата Сообщение от AndreyDyakonov Посмотреть сообщение
собираете эти еще 4 класса смотрите их общие методы и делаете для них общего предка. это будет по ооп.. конечно опять же нужно смотреть по логике..
Если у них общая задача, то да. Иначе будет просто каша из классов. Не известно что, зачем и почему.
0
 Аватар для AndreyDyakonov
122 / 120 / 7
Регистрация: 21.04.2013
Сообщений: 615
28.05.2013, 20:00
Цитата Сообщение от Dolphin Посмотреть сообщение
Не известно что, зачем и почему.
яж говорю, по логике еще посмотреть стоит...
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
28.05.2013, 20:39
Цитата Сообщение от crautcher Посмотреть сообщение
А если метод может быть статичным, его нужно объявить как статичный.
Этого нельзя делать. Очень популярная ошибка.

Таким образом ты связываешь логику работы одного класса (А) с другим (Б с интерфейсом Ж).
И в случае нестатичных методов в Б мы просто можем дать классу А вместо объекта класса Б другой объект с интерфейсом Ж.
В случае статичных методов код А завязан на Б, и Б нельзя изменить.
0
28.05.2013, 20:42

Не по теме:

Цитата Сообщение от _Mikhail_ Посмотреть сообщение
не кто не дает название книги
http://www.ozon.ru/context/detail/id/5648968/ ?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.05.2013, 20:42
Помогаю со студенческими работами здесь

ООП. Множество одинаковых классов?
Есть класс автомобиль. <?php class Desc { // file or folder var $name; var $size; var $link; function...

взаимодействие объектов в ООП
Здравствуйте! Столкнулся с серьёзной проблемой: имеется несколько экземпляров(объектов) класса, которые должны взаимодействовать друг с...

Взаимодействие объектов разных классов
Я или туплю или чего-то не понимаю\не до понимаю. Вопрос в самом коде. class Player { int health; int damage; public: ...

Ооп, сохранение списка объектов производных классов в файл
Здравствуйте! Пишу программу - иерархию классов, тема - ЖД транспорт. Для хранения объектов производных классов надо использовать структуру...

Как добавить взаимодействие классов в диаграмму классов?
Нужна диаграмма классов для пояснительной записки вот такого вида Диаграмма классов которую генерирует visual studio 2012 ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru