Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP, ОПП) Влияет ли наследование классов на производительность? / 18 сообщений из 18, страница 1 из 1
09.08.2005, 16:45
    #33207387
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
Привет всем!

Требуется ваш совет по вопросу наследования классов. :)

На примере... допустим есть пара классов, предназначенных для обработки данных с различными структурами таблиц в базе данных: линейная и иерархическая (в виде дерева) структуры. Необходимо, чтобы можно было добавлять, редактировать, удалять и выводить данные через один интерфейс для разных таблиц. Т.е. в зависимости от типа структуры таблицы запускать соответствующую обработину.

Код: plaintext
1.
2.
3.
DB_TableObject      - базовый класс, предназначенный для хранения и обработки общих свойств классов-потомков
DB_StandartTable    - класс, работающий с линейными структурами таблиц
DB_TreeTable        - класс, работающий с иерархическими структурами таблиц

"Прототипы" классов:

Код: plaintext
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.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
<?php
// ----------------------------------------------------------------------------------
// Классы, предназначенные для обработки различных типов таблиц в БД

// ----------------------------------------------------------------------------------
// Базовый класс (является наследуемым для всех остальных классов)
 
class DB_TableObject {

	var $tablename;		// имя таблицы
	var $primary_key;	// имя первичного ключа в таблице
	
	// .............
	
	function DB_TableObject($tbl, $p_key)
	{
		$this->tablename      = $tbl;
		$this->primary_key    = $p_key;
	}
	
	// .............
}

// ----------------------------------------------------------------------------------
// Класс DB_StandartTable работает с линейными структурами таблиц в БД

class DB_StandartTable extends DB_TableObject {
    
    // .............
    
    function DB_StandartTable($tbl, $p_key)
    {
        $this->DB_TableObject($tbl, $p_key);
        
        // .............
    }
    
    // .............
    
/******
 * Формирует SQL-запрос для команды DELETE
 * Возвращает SQL-запрос
 ***/
    function getDeleteSqlQuery()
    {
        return 'DELETE FROM '.$this->tablename.' WHERE '.$this->primary_key.'='.$_POST[ $this->primary_key ];
    }
    
    // .............
}


// ----------------------------------------------------------------------------------
// Класс DB_TreeTable работает с иерархическими структурами таблиц в БД

class DB_TreeTable extends DB_TableObject {
    
    // .............
    
    function DB_TreeTable($tbl, $p_key)
    {
        $this->DB_TableObject($tbl, $p_key);
        
        // .............
    }
    
    // .............
    
/******
 * Формирует SQL-запрос для команды DELETE
 * Возвращает SQL-запрос
 ***/
    function getDeleteSqlQuery()
    {
        return 'DELETE FROM '.$this->tablename.' WHERE '.$this->primary_key.'='.$_POST[ $this->primary_key ];
    }
    
    // .............
}
?>

Теперь суть вопроса:

Когда я решил немного заняться "рефакторингом", то обнаружил, что часть методов (пара методов) класса DB_TreeTable совпадает с методами класса DB_StandartTable. Например - getDeleteSqlQuery().
Стоит ли из-за двух методов сделать класс DB_TreeTable потомком класса DB_StandartTable (типа class DB_TreeTable extends DB_StandartTable)? А остальные методы "переопределить"...
По смыслу вроде бы вполне логично так реализовать (с точки зрения ОПП). :)

Насколько "наследование" в PHP "увеличивает" нагрузку на сервер или "наследование классов" никак не влияет на производительность?


Заранее благодарю! :)
...
Рейтинг: 0 / 0
09.08.2005, 16:55
    #33207444
.-.-.-.-.-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
> Насколько "наследование" в PHP "увеличивает" нагрузку на сервер или
> "наследование классов" никак не влияет на производительность?

производительность снизится на 7.8 секунд/метр_кубический :-|
...
Рейтинг: 0 / 0
09.08.2005, 16:58
    #33207453
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
>"наследование классов" никак не влияет на производительность?
Влияет.. причем зависимость печально нелинейая. Есть шанс, что при наличии большого количества родителей при исполнении скрипта время затраченное на определение родителей больше, чем на исполнение скрипта. В цифрах ничего не могу сказать. Попробуй написать профайлер и оценить скорость исполнения.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
09.08.2005, 16:59
    #33207459
.-.-.-.-.-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
4m@t!c>"наследование классов" никак не влияет на производительность?
Влияет.. причем зависимость печально нелинейая. Есть шанс, что при наличии большого количества родителей при исполнении скрипта время затраченное на определение родителей больше, чем на исполнение скрипта. В цифрах ничего не могу сказать. Попробуй написать профайлер и оценить скорость исполнения.

откуда такие данные и как проводилось тестирование ?
...
Рейтинг: 0 / 0
09.08.2005, 17:00
    #33207466
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
.-.-.-.-.-> Насколько "наследование" в PHP "увеличивает" нагрузку на сервер или
> "наследование классов" никак не влияет на производительность?

производительность снизится на 7.8 секунд/метр_кубический :-|
Можно конечно и поприкалываться... но опыта работы у меня пока не так и много. Иначе бы не спрашивал

Вообще влияет ли на производительность разбор "какой класс что наследует и какие методы переопределяются"?
...
Рейтинг: 0 / 0
09.08.2005, 17:06
    #33207488
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
2 4m@t!c
откуда такие данные и как проводилось тестированиеДа, мне тоже интересно узнать, где можно почитать про это. :)

Конкретно в моем случае получается, что класс DB_TreeTable наследуется от двух классов. Причем в нем "переопределяются" порядка 10 методов и 2 "наследуются" от DB_StandartTable.
...
Рейтинг: 0 / 0
09.08.2005, 17:07
    #33207495
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
Опыт не мой. Когда-то зашел разговор о ООП и наследовании и т.д. Действительно опытный человек упомянул, что если много наследовать и переопределять - это порочная практика, так как скорость исполнения заметно снижается.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
09.08.2005, 17:13
    #33207517
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
4m@t!cОпыт не мой. Когда-то зашел разговор о ООП и наследовании и т.д. Действительно опытный человек упомянул, что если много наследовать и переопределять - это порочная практика, так как скорость исполнения заметно снижается.
----------------------------------------
Артисты не приехали, приехали цыганеТ.о. образом не стОит заморачиваться на наследовании из-за двух методов? :)
...
Рейтинг: 0 / 0
09.08.2005, 17:16
    #33207528
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
Думаю, что не стОит.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
09.08.2005, 17:24
    #33207559
.-.-.-.-.-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
Во-первых, большое дерево наследования выглядит очень подозрительно (под большим я имею ввиду более 3 уровней). Причем не в плане скорости а в плане проектирования. Здесь стоит обратить внимание на делегирование, но это именно концептуальное улучшение, а не оптимизация скорости.

Во-вторых, почему эти 2 метода нельзя вынести в родительский метод ? (это вопрос лично автору топика).
...
Рейтинг: 0 / 0
09.08.2005, 17:24
    #33207561
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
> Думаю, что не стОит.

thx, 4m@t!c!
...
Рейтинг: 0 / 0
09.08.2005, 17:25
    #33207565
.-.-.-.-.-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
.-.-.-.-.-Во-вторых, почему эти 2 метода нельзя вынести в родительский метод ? в смысле, в родительский класс
...
Рейтинг: 0 / 0
09.08.2005, 17:28
    #33207582
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
.-.-.-.-.-
Во-вторых, почему эти 2 метода нельзя вынести в родительский класс?
возник аналогичный вопрос - не успел запостить...;))))
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
09.08.2005, 17:31
    #33207590
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
Не там ищете. Наследование - это самое узкое место в вашем коде?
...
Рейтинг: 0 / 0
09.08.2005, 17:31
    #33207593
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
> Во-первых, большое дерево наследования выглядит очень подозрительно (под большим я имею ввиду более 3 уровней)

Если делать так как показано на прототипах классов, то получится как раз 3 уровня (2 родительских класса, 1 потомок).


> Здесь стоит обратить внимание на делегирование

А что значит "делегирование"? :)


> Во-вторых, почему эти 2 метода нельзя вынести в родительский метод ?

В конкретном случае (в проекте) это было бы не совсем логично (по смыслу класса). Хотя возможно вы и правы :)
...
Рейтинг: 0 / 0
09.08.2005, 17:33
    #33207599
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
*Не там ищете.А где следует искать?

*Наследование - это самое узкое место в вашем коде?В каком смысле "узкое"?
...
Рейтинг: 0 / 0
09.08.2005, 20:53
    #33207858
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
Berkut *Не там ищете.А где следует искать?Программы = алгоритмы + структуры данных. Вы уже искали в этих двух слагаемых? *Наследование - это самое узкое место в вашем коде?В каком смысле "узкое"?В буквальном. В плане затрат временнЫх ресурсов.
...
Рейтинг: 0 / 0
10.08.2005, 11:10
    #33208023
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(PHP, ОПП) Влияет ли наследование классов на производительность?
.-.-.-.-.-Во-вторых, почему эти 2 метода нельзя вынести в родительский метод ? (это вопрос лично автору топика).Хотя возможно вы и правы :)
Решил так и сделать :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class DB_StandartTable {

	var $tablename;		// имя таблицы
	var $primary_key;	// имя первичного ключа в таблице

    // .............
    
    function DB_StandartTable($tbl, $p_key)
    {
		$this->tablename      = $tbl;
		$this->primary_key    = $p_key;
       
        // .............
    }
    
    // .............
}

class DB_TreeTable extends DB_StandartTable {
    // .............
}

*Программы = алгоритмы + структуры данных. Вы уже искали в этих двух слагаемых?Не совсем догоняю хода ваших мыслей... какое отношение "алгоритмы + структуры данных" имеют к "наследованию классов"?
Полагаю, что вы клоните в неверному проектированию, так? :)

*Наследование - это самое узкое место в вашем коде?
Нет. Просто вчера решил "остановиться" и посмотреть/проверить что получается, и обнаружил, что некоторые однотипные операции (обработки) повторяются в разных классах. Собственно поэтому и возник такой вопрос "Как лучше и правильнее сделать?". Имхо, ничего плохого в такой практике не вижу, чтобы на определенном этапе "улучшить" код :)

Что касается поиска "алгоритмов + структуры данных", то если честно, не искал.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP, ОПП) Влияет ли наследование классов на производительность? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]