Размер класса
От: Pyro Sun Украина  
Дата: 14.06.06 08:47
Оценка:
Кто как считает? Какой размер класса в строках оптимален для понимания того что там происходит?

Из своих наблюдений пришел к выводу что класс должен быть меньше 1000 строчек.
Да и 1000 это пожалуй великовато.
Re: Размер класса
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 14.06.06 09:27
Оценка: -8 :))) :))) :))) :))) :))) :))) :))) :)
Здравствуйте, Pyro Sun, Вы писали:

PS>Из своих наблюдений пришел к выводу что класс должен быть меньше 1000 строчек.


А на каком языке?

Вот одна строка на одном языке: IF a THEN b ELSIF c THEN d ELSE e END
а вот пятнадцать строк на другом:
if (a)
{
  b();
}
else
{
  if (c)
  {
    d();
  }
  else
  {
    e();
  }
}
Re[2]: Размер класса
От: Cyberax Марс  
Дата: 14.06.06 09:32
Оценка:
Сергей Губанов wrote:
> Вот одна строка на одном языке: IF a THEN b ELSIF c THEN d ELSE e END
> а вот пятнадцать строк на другом:
if a: b() else if c: d() else e()


if (a) b(); else if (c) d(); else e();
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[2]: Размер класса
От: Pyro Sun Украина  
Дата: 14.06.06 09:34
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>А на каком языке?


на самом деле язык не важен, если он высокоуровневый...

СГ>Вот одна строка на одном языке: IF a THEN b ELSIF c THEN d ELSE e END

СГ>а вот пятнадцать строк на другом:
СГ>
СГ>if (a)
СГ>{
СГ>  b();
СГ>}
СГ>else
СГ>{
СГ>  if (c)
СГ>  {
СГ>    d();
СГ>  }
СГ>  else
СГ>  {
СГ>    e();
СГ>  }
СГ>}
СГ>


Это все изврашения . Можно и второй кусок кода в одну строчку засунуть
Re: Размер класса
От: Блудов Павел Россия  
Дата: 14.06.06 09:44
Оценка:
Здравствуйте, Pyro Sun, Вы писали:

PS>Кто как считает? Какой размер класса в строках оптимален для понимания того что там происходит?


Это зависит от.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re: Размер класса
От: bkat  
Дата: 14.06.06 09:50
Оценка: 1 (1) +1
Здравствуйте, Pyro Sun, Вы писали:

PS>Кто как считает? Какой размер класса в строках оптимален для понимания того что там происходит?


PS>Из своих наблюдений пришел к выводу что класс должен быть меньше 1000 строчек.

PS>Да и 1000 это пожалуй великовато.

Размер в строках — это плохой критерий в этом случае.
Надо смотреть на функциональность.

Размер в строках для класса для меня лично никогда не было большой проблемой.
А вот неудачные названия для методов, дублирование функциональности (copy/paste)
и прочие проблемы плохого дизайна класса — это то, что реально мешает пониманию.
Re[2]: Размер класса
От: mrozov  
Дата: 14.06.06 09:55
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:


if (b>0) CallSomeFunction() else i = i + 1; for(int t=i;i<100;i++) callOther(i); while(true) { bla-bla-bla}


Когда-то, помнится, чемпионаты по таким штукам производились...
Re: Размер класса
От: FoolS.Top Армения  
Дата: 14.06.06 09:58
Оценка: +1 -1
Здравствуйте, Pyro Sun, Вы писали:

PS>Кто как считает? Какой размер класса в строках оптимален для понимания того что там происходит?


PS>Из своих наблюдений пришел к выводу что класс должен быть меньше 1000 строчек.

PS>Да и 1000 это пожалуй великовато.

Как говорят классики, класс-отражение некоторой сущности действительности (хотя действительность вообще говоря сама может быть некоторой абстракцией в другой более "реальной" действительности). Тогда получается (если взять нормаьный, непатологический код), что в среднем одна строка должна описывать одно свойство этой сущности или какое-то ее (сущности) поведение. Даже если какой-то объект имеет столько свойств, то это означает только, что такой объект-некая сложная система, и представить его нужно в виде агрегации его подсистем (подобъектов), например, аэродром, взлетные полосы.
Такие вещи прекрасно описаны в книге Г. Буча (название сейчас точно не помню, по-моему "Объекто-ориентированный анализ...").
Feierlich, misterioso
Re[2]: Размер класса
От: bkat  
Дата: 14.06.06 09:58
Оценка:
Ну ну...
Про синтаксический оверхед мы уже наслышаны.
Re[2]: Размер класса
От: vitaly_spb Россия  
Дата: 14.06.06 09:59
Оценка: :)
СГ>Вот одна строка на одном языке: IF a THEN b ELSIF c THEN d ELSE e END

И снова все свели к оберону и синтаксическому оверхеду...
...Ei incumbit probatio, qui dicit, non qui negat...
Re[2]: Размер класса
От: Kluev  
Дата: 14.06.06 10:09
Оценка: 12 (1) +1 :))) :))) :))
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Pyro Sun, Вы писали:


PS>>Из своих наблюдений пришел к выводу что класс должен быть меньше 1000 строчек.


СГ>А на каком языке?


СГ>Вот одна строка на одном языке: IF a THEN b ELSIF c THEN d ELSE e END

Зачот

Вот одна строка на одном языке:
p += q;


А вот эта же строка на другом:
p.x := p.x + q.x; p.y := p.y + q.y; p.z := p.z + q.z;
Re: Размер класса
От: Eugene Beschastnov Россия http://eugenius-nsk.livejournal.com/
Дата: 14.06.06 10:15
Оценка: 4 (1)
Здравствуйте, Pyro Sun, Вы писали:

PS>Кто как считает? Какой размер класса в строках оптимален для понимания того что там происходит?


PS>Из своих наблюдений пришел к выводу что класс должен быть меньше 1000 строчек.

PS>Да и 1000 это пожалуй великовато.

Я думаю, что важнее не общий размер класса, а размер его методов и количество этих методов. Так, класс из одного метода на 500 строчек воспринимается хуже, чем класс из 20 методов по 25 строчек в каждом. Ну и, конечно, количество единиц функциональности на строчку кода таки зависит от языка, как бы ни пинали Сергея Губанова

(филосовское отступление) Вообще, наверное, нужно различать "оптимальное количество строчек кода" и "оптимальное количество функциональности". Первый параметр имеет значение на маленьких объёмах кода — когда можно охватить весь код одним взглядом. Второй же параметр важен при понимании функциональности класса в целом, т.е. при бОльших объёмах кода. На близкую тему была довольно интересная дискуссия — http://sobaker.livejournal.com/231436.html .
--
Бесчастнов Евгений
Re[3]: Размер класса
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 14.06.06 11:56
Оценка: :)
Здравствуйте, Kluev, Вы писали:

K>Вот одна строка на одном языке:

K>
p += q;


K>А вот эта же строка на другом:

K>
p.x := p.x + q.x; p.y := p.y + q.y; p.z := p.z + q.z;


Ага, щаз!!!

Inc(p, q);

Где процедура Inc определена как:

PROCEDURE Inc (VAR p: Vector; IN q: Vector);
BEGIN p.x := p.x + q.x; p.y := p.y + q.y; p.z := p.z + q.z
END Inc;
Re[4]: Размер класса
От: Kluev  
Дата: 14.06.06 12:41
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Inc(p, q);


СГ>Где процедура Inc определена как:


СГ>PROCEDURE Inc (VAR p: Vector; IN q: Vector);

СГ>BEGIN p.x := p.x + q.x; p.y := p.y + q.y; p.z := p.z + q.z
СГ>END Inc;

Круто!

p = Vx*cos(t) + Vy*sin(t); // кружок-с


Set(p, Add(Mul(Vx,cos(t), Mul(Vy,sin(t)))); // <- пока писал уже запутался со скобками
Re[4]: Размер класса
От: Кодёнок  
Дата: 14.06.06 12:51
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

K>>p += q;

K>>А вот эта же строка на другом:
K>>p.x := p.x + q.x; p.y := p.y + q.y; p.z := p.z + q.z;
СГ>Ага, щаз!!!
СГ>Inc(p, q);

Продолжим мысль:

p += a1*b1 + a2*b2 + Vector(0, 0, c)

На другом языке:

Inc(p, Sum(Sum(Mul(a1, b1), Mul(a2, b2)), MkVector(0, 0, c)));

Где-то я уже видел столько скобок.
Re[5]: Размер класса
От: Трурль  
Дата: 14.06.06 13:57
Оценка: 18 (1)
Здравствуйте, Кодёнок, Вы писали:

Кё>Продолжим мысль:


char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";
main(){printf(f,34,f,34,10);}


На другом языке:
Q
Re[2]: Размер класса
От: Pyro Sun Украина  
Дата: 14.06.06 13:57
Оценка:
Здравствуйте, FoolS.Top, Вы писали:

FT>Как говорят классики, класс-отражение некоторой сущности действительности (хотя действительность вообще говоря сама может быть некоторой абстракцией в другой более "реальной" действительности). Тогда получается (если взять нормаьный, непатологический код), что в среднем одна строка должна описывать одно свойство этой сущности или какое-то ее (сущности) поведение. Даже если какой-то объект имеет столько свойств, то это означает только, что такой объект-некая сложная система, и представить его нужно в виде агрегации его подсистем (подобъектов), например, аэродром, взлетные полосы.

FT>Такие вещи прекрасно описаны в книге Г. Буча (название сейчас точно не помню, по-моему "Объекто-ориентированный анализ...").

Интересно отражением какой "реальной сущьности"? являеться класс шаблона Facade, который представляет собой надстройку над интерфейсом 5 или более классов... А что класс отражает некоторую сушьность действительности это фигня, зачастую это не так, как в выше привеленном примере.
Re[2]: Размер класса
От: Pyro Sun Украина  
Дата: 14.06.06 14:09
Оценка:
Здравствуйте, Eugene Beschastnov, Вы писали:

EB>(филосовское отступление) Вообще, наверное, нужно различать "оптимальное количество строчек кода" и "оптимальное количество функциональности". Первый параметр имеет значение на маленьких объёмах кода — когда можно охватить весь код одним взглядом. Второй же параметр важен при понимании функциональности класса в целом, т.е. при бОльших объёмах кода. На близкую тему была довольно интересная дискуссия — http://sobaker.livejournal.com/231436.html.


Спасибо за ссылку почитал... Как видно собрались там любители смолтолка... Я тоже себя к ним отношу...
но чтобы на нем какие то проекты писать... бр....
Я же иммел ввиду более традиционные языки C++, С#, ObjectPascal.

Теперь насчет оптимального количества строчек кода...
Понятно что если в классе реализован сложный алгоритм, к примеру дискретное преобразование Фурье,
или в классе реализвано простое 'линейное' действие, вроде сериализации обьекта в базу данных.
То это две большие разницы с точки зрения понимания функционирования данного кода.
Я же иммел ввиду код одинаковой сложности...
Re[6]: Размер класса
От: Pyro Sun Украина  
Дата: 14.06.06 14:23
Оценка: :)
Я уже начал думать что кто приведет класс на асме или на смолтолке или турбопрологе... Не доходите до маразма

Я иммел ввиду один и тот же по функциональной сложности код, написаный в одном и томже стиле одним и тем же программистом...

на таких языках как С++, C#, ObjectPascal
Re[2]: Размер класса
От: Pyro Sun Украина  
Дата: 14.06.06 14:35
Оценка:
Здравствуйте, bkat, Вы писали:

B>Размер в строках для класса для меня лично никогда не было большой проблемой.

А если класс являеться Facade для 5 и более классов... И так может получится что этот Facade
все растет и растет и вырастает дето до 3000-5000 строчек. Обозревать это все нехватает никакой возможности.
Вот такие классы нада резать на более мелкие. Отсюда и делаю вывод что классы больше 1000 строк это зло...

B>А вот неудачные названия для методов, дублирование функциональности (copy/paste)

за копи/паст сразу руки обычно отрывают разработчикам, либо не сразу а када проект валиться начинает
B>и прочие проблемы плохого дизайна класса — это то, что реально мешает пониманию.
вот я и хочу сказать что класс за 1000 строчек это пример плохого дизайна архитектуры, либо отсутствие постоянного рефакторинга кода...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.