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

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

28.05.2013, 17:38. Показов 5767. Ответов 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,845
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
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru