powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Объектно-ориентированный vs хакерский подход к программированию
25 сообщений из 75, страница 2 из 3
Объектно-ориентированный vs хакерский подход к программированию
    #34178857
ррмяфА что вы написали в разработке чего участвовали, расскажите, пожалуйста.... не волшебник, я только учусь© Потому и спрашиваю

GameDisc -> Disc -> Ware -> Object
GameDisc -> Disc -> Ware -> Object
Будильник -> Часы -> Ware -> Object
Секундомер -> Часы -> Ware -> Object
Женские трусы -> Трусы -> Ware -> Object
Мужские трусы -> Трусы -> Ware -> Object
?
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34178910
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeyShponarskyРеально большой проэкт (по-моему) без ООП не напишешь, а если напишешь то он будет как минимум в раза два больше (кода). ООП - сила.

Увы, сейчас все технологии реализованы с применением ОО подхода.
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34178932
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё просто, как пареная репа !

Хотите "РУБить капу$ту" на пике самых передовых технологий - используйте ООП .

А кто там - приверженец процедурального или еще бог-знает какого программирования - нервно курит в сторонке. Ибо нефиг.

Хакеры говорите?

Ха! Ха!

А вот давайте поймаем одного живого хакера и спросим его - Чел! Ты юзаешь ООП или как?

Тогда всё вопросы исчезнут ИМХО.

C уважением
Lord Mayton
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34179019
smbdy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
срочно переименуйте топик в
mayton
А вот давайте поймаем одного живого хакера
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34179652
PFOcChKen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написать можно всё и при помощи процедурного и при помощи ООП подхода, вопрос во времени, сложности и количестве кода... При процедурном подходе все три параметра будут на порядок больше. Это проверено на практике миллионов программистов, которые работали до нас. ООП разрабатывался не с бадуна, а когда это стало необходимостью, иначе мы до сих пор бы обсуждали процедуры, функции и т.д. и ни каких ООП языков не было бы впринципе. Простой пример - релизуйте хоть более-менее сложный алгоритм при помощи процедурного и ООП подхода и всё станет на свои места. Например - реализация решения ЗЛП в общем случае - задача может иметь сколько угодно переменных и сколько угодно ограничений. Можно попробовать писать на С и С++, например. Мне кажется, что только на более-менее сложных задачах можно увидеть как ООП обгоняет процедурный подход по всем мыслимым критериям.
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34180162
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovПрограммист с ООП мышлением в Вашем искуственном примере первым делом бы завел поле:
Код: plaintext
1.
 private  String osName;
и вокруг него бы выстраивал методы. То что получилось у Вас это не ООП, а пародия на него.

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

Плз.


Kachalov
Если заказчик системы занимается продажей товаров, то сущность "товар" никуда не денется из ТЗ как бы ни изголялся заказчик и какие бы действия над ними не делал.

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

Попробуйте читать то, что я пишу.

Сущности ака "товар" вытекают из анализа предметной области и никуда не могут исчезнуть, пока не изменится сама предметная область, что бывает достаточно редко.

Однако операции с "товаром" могут то исчезать, то появляться.
Код реализующий эти операции будет либо насквозь процедруным, либо будут вводиться вспомогательные объекты (т.н. синтетические объекты, которых полным полно во всех общеизвестных паттернах) позволяющие избавиться от дублирования кода, изменить направление зависимостей, увеличить сцепление и т.д. и т.п.
В первом случае имеем дело не с ООП, а с миксом ООП + процедурщина - без функциональных типов (т.е. в java) этого не достаточно, чтобы писать "хороший" код.
Во втором случае, объекты могут появляться и исчезать так же часто как будет измененяться поведение "стабильных" объектов.
Т.е. вместо гибкости, можно получить необходимость писать лишний код.

Самый лучший вариант ООП + функциональное программирование так, как это сделано в nemerle.
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34180632
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
О, давайте вы, как программист с ООП мышлением, покажите где будет заведено это поле, какие методы с ним будут работать и т.д.

- фигней заниматься не хочется.

NotGonnaGetUs
Однако операции с "товаром" могут то исчезать, то появляться.
Код реализующий эти операции будет либо насквозь процедруным, либо будут вводиться вспомогательные объекты (т.н. синтетические объекты, которых полным полно во всех общеизвестных паттернах) позволяющие избавиться от дублирования кода, изменить направление зависимостей, увеличить сцепление и т.д. и т.п.
- не забывайте про полиморфизм, который поможет адаптировать методы под изменение задачи (при условии что предметная область не изменилась и классы, описывающие сущности, были составлены разумно, скорее всего переопределению подвергнется малое число методов, а в сущностных классах в идеале вообще ничего трогать не придется)
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34180791
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- фигней заниматься не хочется.
А вы займитесь, и увидите, что фигней окажутся слова про "мышление".
Тем более, что тут любое решение простая пара строчек кода.

Kachalov
- не забывайте про полиморфизм, который поможет адаптировать методы под изменение задачи

Какже я его забуду, он мне по ночам только не снится :)

Полиморфизм не бесплатная штука. Любое использование полиморфизма приводит к появлению нового класса наследника, а цепочки наследований приводят к коду изменять, который в некоторых случаях существенно труднее, чем "лапшу" из if-else.


Если вам всё кажется таким солнечным, сделайте то, что я прошу. Не одному мне, думаю, будет интересно увидеть "ООП в действии".
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34181683
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Kachalov

автор- фигней заниматься не хочется.

для фигни на скл.ру есть ПТ. А тут извольте обосновывать. Дофига вас таких, сопливых.
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34181787
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
А вы займитесь, и увидите, что фигней окажутся слова про "мышление".
Тем более, что тут любое решение простая пара строчек кода.

- по просьбам "телезрителей" попытался описать проблему из примера NotGonnaGetUs с "моей" точки зрения, т. е. опираясь на данные (то самое ООП мышление). Боюсь решение никого кроме меня не удовлетворит, т. к. получилось "слишком" просто :)

Код: 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.
 public   class  OS {
    
     private  String name; //OS name
     private   final   static  OS[] OSList= new  OS[]{ new  OS("Linux"),  new  OS("Windows")};
    
     public  OS(String name) {
         this .name=name;
    }
    
     public  String getName(){
         return ( this .name);
    }
        
     public  String toString(){
         return ("This is a "+ this .getName());
    }
    
     public   static  OS getOSByName(String name){
        OS os= null ;
         for ( int  i= 0 ; i<OSList.length; i++){
             if (OSList[i].getName().equalsIgnoreCase(name)) os=OSList[i];
        }
         return ((os!= null )?os: new  OS("Unknown"));
    }
    
}

 public   class  TestOS {
    
     public   static   void  main(String[] arg) {
        System.out.println(OS.getOSByName(System.getProperty("os.name")));
    }
    
}

- возможно не уловил суть проблемы в изложении NotGonnaGetUs, ели что поясните какие проблемы могут возникнуть при использовании предложенного кода
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34181792
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10242Kachalov
автор- фигней заниматься не хочется.
для фигни на скл.ру есть ПТ. А тут извольте обосновывать. Дофига вас таких, сопливых.

- персонально для 1024 - Сергей Сергеевич ведите себя сдержаней, вы вроде взрослый человек, а ведете себя как подросток в период полового созревания. Не хватало еще нам с Вами прилюдно соплями меряться :)
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34183087
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- возможно не уловил суть проблемы в изложении NotGonnaGetUs, ели что поясните какие проблемы могут возникнуть при использовании предложенного кода

1.

a. Сообщения, которые выводятся на экран должны совпадать с теми, что присутствуют в исходном коде. В общем случае эти сообщения произвольные, т.к. мнения о том, что good или bad у разных людей разные.
Т.е. универсального toString() сделать нельзя.

b. Алгоритм определения типа OS в вашем варианте не работает, т.к. ни одна из версий windows не идентифицируется как osName == "windows".

Если учесть это, что ваш варинт будет таким:

Код: 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.
 public   class  PrintOS {
     public   static   void  main( final  String[] args) {
        System.out.println(OS.findByName(System.getProperty("os.name")).getMessage());
    }
}

 class  OS {
     public   static   final  String WINDOWS = "Windows";
     public   static   final  String UNIX = "Unix";
     public   static   final  String UNKNOWN = "Unknown";

     private  String name;

     public  OS(String name) {
         this .name = name;
    }

     public  String getName() {
         return  name;
    }

     public  String getMessage() {
         if  (getName().equals(UNIX)) {
             return  "This is a UNIX box and therefore good.";
        }  else   if  (getName().equals(WINDOWS)) {
             return  "This is a Windows box and therefore bad.";
        }  else  {
             return  "This is not a box.";
        }
    }

     public   static  OS findByName(String osName) {
         if  (isUnix(osName)) {
             return   new  OS(WINDOWS);
        }
         if  (isWindows(osName)) {
             return   new  OS(UNIX);
        }
         return   new  OS(UNKNOWN);
    }

     public   static   boolean  isWindows(String osName) {
         return  osName.equals("Windows NT") || osName.equals("Windows 2003");
    }

     public   static   boolean  isUnix(String osName) {
         return  osName.equals("SunOS") || osName.equals("Linux");
    }
}

2. Проблемы:

а. Нет возможности расширить класс OS поведением специфичным для конкретной операционной системы. Н-р, для windows имеет смысл метод "получить реестр", а для unix или unknown - нет.
Т.е. в нём недостаточно гибкости.

b. Добавление нового типа OS потребует изменения в коде класса OS.
Нарушение OCP.

Общий вывод: требуется рефакторинг "замена переменной типа наследованием или стратегией" (либо наследуем Unix -> OS, либо добавляем в OS поле Type и реализуем Type <- Unix).

с. Класс OS содержит методы c низкой степенью сцепления. Попытки добавления новых методов для работы с OS только усугубят ситуацию. Н-р, есть две группы методов (findByName, isWindows и isLinix) и (getName, getMessage) явно решающих не связные друг с другом задачи. Поэтому нужно выделить первую группу методов в класс OSFactory.

d. Класс OS обладает информацией о всех своих "подтипах". Это проблема, т.к. постоянно появляются новые версии OS, что приведёт к необходимости изменений в классе OS.
Если бы набор OS был фиксирован раз и на всегда, то можно было бы обойтись использованием простого enum'a.

e. Метод getMessage находится не на своём "месте". Пожелания всех желающих засунуть в (полу)библиотечный класс не выйдет. Нужен механизм позволяющий каждому клиенту расширять поведение класса не прибегая к его модификации (опять OCP).

...

Продолжая копаться можно найти ещё кучу различных "поводов" для изменений, каждое из которых будет разрешать _потенциальные_ проблемы, но, вместе с тем, всё больше и больше усложнять общее решение.
И все эти усложнения могут легко пойти лесом, из-за внезапно появившихся у заказчика новых требований совсем "чуть-чуть" меняющих поведение объектов, но почему-то таким способом, который "не ложится" на имеющийся код.
Т.е. стабильность классов оказывается достаточно условной, о чём я и пытаюсь сказать.

Поэтому меня очень радует подход Фаулера и других идеологов хp: останавливаться на самом простом решении из возможных, но при этом оставлять возможности для будущих рефакторингов, чтобы как только решение не сможет удовлетворить изменившимся требованиям, его можно было легко привести к более совершенному виду (заменить параметр типа на стратегию или наследование и т.д.).
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34183104
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
     public   static  OS findByName(String osName) {
         if  (isUnix(osName)) {
             return   new  OS(WINDOWS);
        }
         if  (isWindows(osName)) {
             return   new  OS(UNIX);
        }
         return   new  OS(UNKNOWN);
    }

Опечатка :)
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34183134
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUsОднако операции с "товаром" могут то исчезать, то появляться.
Какие такие операции? Мне просто интересно может я чего нить не понимаю ...

есть товар, у него есть набор свойств ключ=значение, есть артикул, вес, количество, цена, описание и тд(данные). Товар может рассказать о себе (методы). Если например имеется ввиду что у товара должна быть например галка "в прайс" то это может быть уже объект прайс.

вообще я согласен с NotGonnaGetUs. Есть некая граница до которой функциональное программирование удобно и после которой неудобно. Надо делать так чтобы это было максимально эффективно (стоимость работы на полученный результат). Иногда можно сделать "круто" только когда это круто будет работать все клиенты уйдут к конкурентам. Как говорится без фанатизма надо.

Возьмем к примеру тот же товар если торгуете в розницу то поле цена просто делается полем деньги, а вот если торгуем оптом тогда лучше сделать объект цена потому что там уже есть мелкий опт, крупный опт, дилер, спекулянт и дт.

Вообще бизнес процесс зачастую не меняется так быстро чтобы невозможно было напрограммировать то что нужно. Да действительно нужно программировать, но за это кажется программистам деньги и платят :-)
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34183146
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
про фаулера +1
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34183351
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabr
NotGonnaGetUs
Сущности ака "товар" вытекают из анализа предметной области и никуда не могут исчезнуть, пока не изменится сама предметная область, что бывает достаточно редко.

NotGonnaGetUsОднако операции с "товаром" могут то исчезать, то появляться.
Какие такие операции? Мне просто интересно может я чего нить не понимаю ...


"товар" используется в качестве примера, а затем синонима для обозначения классов выведенных непосредственно при анализе предметной области.

Операции == действия над объектами/данными.
Н-р, вчера нужно было напечатать в консоль, что "This is a UNIX box and therefore good.", а сегодня версию OS и тип файловой системы. Объект один и тот же - "OS", а представить его ввиде классов/данных можно очень по разному (и сильно потом жалеть).

Тут же уместно вспомнить известный пример про написания класса "стол".
И в очередной раз убедиться, что ООП очень хорошо подходит для решения _конкретной_ задачи, и не очень подходит для создания решений для _семейств_ задач, особенно если в постановке задачи начинают фигурировать "естественные" понятия, которые бывает очень проблематично представить ввиде фиксированного набора свойств, а значит и отобразить в класс.
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34185711
Вот еще один пример сопоставления OOP vs NOOP.

Я тоже заметил давно, что OOP очень сильно смахивает на способ записи процедур и функций в классы, т.е. эдакое модуляризированное процедурное программирование.

Мне вот интересно, а если у класса из примера в статье не 2 состояния male|female, а 15 или 30, что, 30 классов-наследников писать? А если иерархий наследования не одна а 3-4?
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34185840
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какбытькакжитьЯ тоже заметил давно, что OOP очень сильно смахивает на способ записи процедур и функций в классы, т.е. эдакое модуляризированное процедурное программирование.

А я давно заметил, что написание программ очень смахивает на работу с MS Word, т.е. эдакое набирание буковок на клавиатуре.

Правда, мы с тобой "зрим в корень", а все остальные ничего в этой жизни не понимают?
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34185929
ldima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какбытькакжить Вот еще один пример сопоставления OOP vs NOOP.

Я тоже заметил давно, что OOP очень сильно смахивает на способ записи процедур и функций в классы, т.е. эдакое модуляризированное процедурное программирование.

Мне вот интересно, а если у класса из примера в статье не 2 состояния male|female, а 15 или 30, что, 30 классов-наследников писать? А если иерархий наследования не одна а 3-4?

В качестве варианта советую почитать какую-нибудь книгу по шаблоном проектирования или вообще по ооп. а потом уж этот подход критковать, если не нравится. Проблемы с порождением большого числа классов обычно вполне решаемы
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34185986
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ув. Наснипаиметь, ваших огромных постов мой убитый оопом моск ниасиливает - но чую голимая крамола. Озвучте пожалуйста тезис в полторы строки, чтоб его можно было предметно оспорить

заранее сапсибо

вот одна из попыток воспринятия мегапрог (см.выш):
ущербные оопные куски писал явный провокатор задавщийся мелочной целью построить себе имя на попрании досточтимы Основ. но и на него найтётся хитрый болт: берём его креативы, компилим C++ компилятором, дизасемблируем - получаем процедурный код беспрецендентный по своей невообразимой вычурности. дальше делаем выводы что дейкстра и вирт должны отправиться в ад прямиком минуя чистилище.
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34186093
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exppув. Наснипаиметь, ваших огромных постов мой убитый оопом моск ниасиливает - но чую голимая крамола. Озвучте пожалуйста тезис в полторы строки, чтоб его можно было предметно оспорить

заранее сапсибо


А вы почитайте это сообщение .
Там есть п.1 и п.2.
Если согласны с п.1., то переходим к п.2 про проблемы (не знаю как можно не согласиться с п.1.)

Если в пунктах a/b/c/d/e что-то не понятно, то зацитируйте и задайте вопрос об этом.

Или можете повторить опыт Kachalov'a и показать нам, что ваш моск советует сделать с исходным кодом (тем, где всего один метод main), чтобы он стал "чиста" объекто ориентированным, а не процедурным.


Что вам за тезис нужен - не понял.
Если хочется с чем-нибудь по спорить, то вот вам несколько:

1. Если злоупотреблять ООП, т.е. порождать классы при декомпозиции поведния объектов выведенных из предметной области, изменения в коде будет делать так же сложно, как если бы весь код был насквозь процедурным.
2. ООП со статической типизацией (и без вывода типов) приводит к большему количеству кода (в строчках) и к более сложным решениям (количество объектов и связей между ними), чем ООП с динамической типизацией.
3. Хороший ООЯ должен сочетать не ООП + процедурное программирование, а ООП + функциональное программирование.
4. Останавливаться нужно на самом простом решении из возможных, но при этом оставлять возможности для будущих рефакторингов (чтобы при необходимости можно было легко получить более "правильное" решение).
5. "Естественные" понятия, которые проблематично описать фиксированным набором "свойств", представить "универсальным" классом практически невозможно. Конкретное задачи потребуют разные классы. Откуда следует вывод, что применимость ООП достаточно ограничена и рассматривать его как "мышление" можно только с натяжкой.
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34186716
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
А вы почитайте это ..

слишкам многа букаф

нужен descision table pattern а не class Os. ловим
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 class  OsDescisioner{
String setSource(String src) ;  
Map<String,String> setDescisionTable(Map<String,String> descisionTableFromAnywhere);
String getDescision();
}

...
...
OsDescisioner osd =  new  OsDescisioner();
osd.setSource(sys.getProp("os.name"));
osd.setDescisionTable(staticDscTable);
System.out.println(odd.getDescision());
...
...

NotGonnaGetUs
1. Если злоупотреблять ООП ...
а если херакнуть молотком по пальцу ... не злоупотребляйте им. <<хороших>> молотков не бывает.
NotGonnaGetUs
2. ООП со статической типизацией (и без вывода типов) приводит к большему количеству кода (в строчках) и к более сложным решениям (количество объектов и связей между ними), чем ООП с динамической типизацией.
просматривая подобные объёмы кода я как правило вспоминаю "обезъяну с гранатой". динамические языки верный способ отстрела собственных ног.
NotGonnaGetUs
3. Хороший ООЯ должен сочетать не ООП + процедурное программирование, а ООП + функциональное программирование.
вот и сочетайте. функциональные фишки лекго впендюриваются в нормальные языки. вам что с чем надо скрестить?
NotGonnaGetUs
4. Останавливаться нужно на самом простом решении ... я бы постеснялся так боянить
NotGonnaGetUs
5. "Естественные" понятия, ... а об этом немного позже
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34186967
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exppслишкам многа букаф
Ну вы сосредоточтесь, попросите кого-нибудь помочь вам разобраться.
А то мне придётся повторять тоже самое, будет опять много буковок, а т.к. для вас это сложно, то получится замкнутый круг.

expp
ловим
Код: plaintext
1.
2.
3.
4.
5.
 class  OsDescisioner{
String setSource(String src) ;  
Map<String,String> setDescisionTable(Map<String,String> descisionTableFromAnywhere);
String getDescision();
}


Полную имплементацию плз (вместе с инициализаций descisionTable и т.п.), чтобы между нами не вышло не понимания.

А пока могу констатировать только то, что таблица выбора - это паттерн процедурного/структурного программирования и прикрученный к map'е
класс OsDesc* просто лишний.
Достаточно иметь проинициализированный map.

Сравниваем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
//было:
OsDescisioner osd =  new  OsDescisioner();
osd.setSource(sys.getProp("os.name"));
osd.setDescisionTable(staticDscTable);
System.out.println(odd.getDescision());

//стало:
string descision = staticDscTable.get(sys.getProp("os.name"));
System.out.println(descision);

Практически никаких _потенциальных_ проблем исходного решения ваше решение не решает и добавляет новые.
Так при изменении условий проверок, н-р, с (osName.equals("Windows NT") || ...) на (osName.toLowerCase().startWith("win")) таблицу придётся целиком выкинуть.

expp
а если херакнуть молотком по пальцу ... не злоупотребляйте им. <<хороших>> молотков не бывает.

Тоже любите боянить? :)

Говоря "не злоупотребляйте", вы соглашаетесь с невозможность применять объекто-ориентированный подход на всех этапах написания кода. А это равнозначно признанию в том, что данный подход не является универсальным и достаточно полным. Если это так, то ни о каком оо-мышлении говорить нельзя. А вы, кажется, с этим не хотите соглашаться? )


expp
NotGonnaGetUs
2. ООП со статической типизацией (и без вывода типов) приводит к большему количеству кода (в строчках) и к более сложным решениям (количество объектов и связей между ними), чем ООП с динамической типизацией.
просматривая подобные объёмы кода я как правило вспоминаю "обезъяну с гранатой". динамические языки верный способ отстрела собственных ног.

И тем не менее факт на лицо: кода получается меньше :)

В ОО языки с динамической типизацией почти все gof паттерны вырождаются до тривиальных конструкций, которые стыдно называть паттернами.

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

expp
вот и сочетайте. функциональные фишки лекго впендюриваются в нормальные языки. вам что с чем надо скрестить?

*впендюриваются* легко, но пользоваться этим потом не возможно. Особенно в java, где нет никакой поддержки этих фокусов со стороны стандартных библиотек и языковых конструкций.
В С# c это всё есть, но всё равно не очень удобно (сужу по полугоду использования функциональных фич в этом языке :)). Поэтому ваш совет не совсем к месту.

Что с чем и как скрещивать иллюстрирует язык nemerle.
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34187139
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и прикол что если мысль есть то занимает она две строки от силы...
мой код вы поняли более чем верно.

NotGonnaGetUsА пока могу констатировать только то, что таблица выбора - это паттерн процедурного/структурного программирования и прикрученный к map'е

ООП вообще паттерн процедурного/структурного программирования.

NotGonnaGetUsГоворя "не злоупотребляйте", вы соглашаетесь с невозможность ... да ни в жисть - уметь надо и всё

NotGonnaGetUsИ тем не менее факт на лицо: кода получается меньше :) ассемблер вот язык достойный лаконичного мужа. Лапшу из if ов я просто не навижу авторов её предаю разнузданному геноциду
NotGonnaGetUs*впендюриваются* легко, но пользоваться этим потом не возможно.
вы пробовали ? лично я использовал Drools. впечатления нормальные

NotGonnaGetUsnemerle. с возрастом это проходит
...
Рейтинг: 0 / 0
Объектно-ориентированный vs хакерский подход к программированию
    #34187290
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exppв том то и прикол что если мысль есть то занимает она две строки от силы...
мой код вы поняли более чем верно.

Прикол в том, что такая таблица приведёт к существенно большему дублированию кода, чем несколько в if-else, если нам потребуется в каком-то месте вывести чуть другие сообщения.
Так же точно потребуется вносить много изменений в уже написанные код, если нужно будет получать не строку в зависимости от типа ОС, а какую-то специфичную для данной ОС информацию.
И т.д. и т.п. (много буков)

Если попытаться честно расписать ваше решение и избавить его от описанных недостатков получится ровно тоже большое количество классов и таже сложность.

И вы это похоже прекрасно понимаете :) Тогда я не понимаю к чему были ваши слова "голимая крамола".


expp
NotGonnaGetUsА пока могу констатировать только то, что таблица выбора - это паттерн процедурного/структурного программирования и прикрученный к map'е
ООП вообще паттерн процедурного/структурного программирования.

И чего? Вместо полиморфизма будет использовать опять таблицы, а вместо классов структуры или массивы с дикриминаторами? И зачем?

expp
да ни в жисть - уметь надо и всё

Трухлявый бояян. Умеете - покажите. Не умеете - не говорите.

Я показал к какому коду может привести следовании оо принципам.
Вы назвали это "ущербными оопными кусками", если я правильно понял.
Если "умеете" продемонстрируйте как сделать отличные "оопные куски".
Пока вы этого не сделали.


expp
NotGonnaGetUsИ тем не менее факт на лицо: кода получается меньше :) ассемблер вот язык достойный лаконичного мужа.

Разве на ассемблере получается коротко? Мы вроде как не размер бинарников сравниваем...


expp
Лапшу из if ов я просто не навижу авторов её предаю разнузданному геноциду

Геноцид заключается в том, что авторов заставляют переписывать всё на таблицы? :)


expp
вы пробовали ? лично я использовал Drools. впечатления нормальные

Drools/Groovy/etc это не java. Это другие языки.
Писать тела методов java классов на них не получится.

expp
NotGonnaGetUsnemerle. с возрастом это проходит

Что именно? Желание иметь лямбды, паттерн матчинг, вывод типов и прочии конструкции позволяющие писать более лаконичный код, в частности, лишённый структурного дублирования ? )
Добавте пару буковок для расшифровки, я их осилю.
...
Рейтинг: 0 / 0
25 сообщений из 75, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Объектно-ориентированный vs хакерский подход к программированию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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