Имя: Пароль:
IT
 
Вопрос по ООП
, ,
0 Rizhij_Nikitos
 
02.11.15
11:09
Работаю над чужим проектом на C# под Unity3d, занимаюсь приведением в порядок кода. До меня принципы ООП лишь отдаленно соблюдены в некоторых местах. В частности - сейчас есть гланый статический класс, который имеет доступ к различным объектам, все остальные классы сцены бесцеремонно, по-требованию лезут в главный класс, обращаются к его свойствам и методам, а так же через него к свойствам и методам объектов, к которым есть доступ у главного класса. В качестве альтернативы я предложил инверсию связей, когда мелкие классы, в случае необходимости оповещают главный класс о том, что им необходимы какие-то данные и главный класс либо выдает свои данные, либо запрашивает их у других объектов и передает тем, кому они понадобились. Собственно реализация через события - все мелкие при инициализации публикуются, главный подписывается и ждет события запроса данных, когда видит событие - передает данные. Вопрос в том, не угробится ли к чертям вся производительность при реализации этих подписок и публикаций, если сейчас количество классов, использующих главный класс чуть больше 50, соответственно и число подписок и публикаций будет такое же? Как лучше поступить?
1 Злопчинский
 
02.11.15
11:10
Пока настоящие программисты причесывают код и рассуждают про ООП, 1Сники молча рубят бабло...
2 Rizhij_Nikitos
 
02.11.15
11:11
Сетка не в лайф, за бабло не обсуждаем - другой вопрос. Вопрос по организации архитектуры, если на форуме есть люди, которые разбираются в ООП.
3 Vovan1975
 
02.11.15
11:20
даешь ООП срач!
4 Локи-13
 
02.11.15
11:21
(2) не очень понял при чем тут ооп и производительность некоего проекта на юнити?

И как это "есть гланый статический класс, который имеет доступ к различным объектам"
а объект у нас разве не экземпляр класса?
5 Кирпич
 
02.11.15
11:22
(0) Да ты делай как хочешь. Главное чтобы работало быстро и правильно. А если будет работать медленно или неправильно, то следующий за тобой всё напишет заново. Почему напишет заново? Потому что ты так всё запутаешь со своим ООП, что лень будет всё распутывать.
6 Живой Ископаемый
 
02.11.15
11:27
2(0) Все мобильные приложенияработают через подписку-нотификацию. И в любой момент времени таких объектов может быть масса. В конце концов, зачем придумали этот паттерн? Чтобы у прога срабатывала рефлексия по поводу - а зачем я буду делать правильно? Может пусть я сделаю гамняно, но зато прога будет работать работать быстрее в два раза? И каждая атомарная операция вместо того, чтобы выполняться 0.01 с будет выполняться 0.005 с? Точно. так и сделаю, зато потом если понадобиться внести изменение в код, я потрачу не не полчаса, а 4, а если это будет делать другой прог, так и все 8, и в результате клиент заплатит больше денег. Здорово ведь!
7 Волшебник
 
модератор
02.11.15
11:30
(1) Это, кстати, моя фраза.
8 Rizhij_Nikitos
 
02.11.15
11:34
(6) Вот поэтому я и не женюсь(с) Собственно по этому и стоит сейчас вопрос... либо делать через нотификации, тогда придется инициализировать при старте все объекты и делать подписки, боюсь что угроблю быстродействие, либо есть какой то другой способ, который я не знаю, который позволит более качественно реализовать архитектуру.

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

(4)просто статический класс реализованный через одиночку по сути своей является объектом, а остальные объекты являются либо экземплярами, либо такая же статика(иногда просто статический класс без одиночки)
9 Rizhij_Nikitos
 
02.11.15
11:35
+(8) вопрос о том, есть ли еще какие то паттерны, либо методы, либо идеи как лучше это сделать.
10 Woldemar177
 
02.11.15
11:45
Помнится когда попер С++ с библиотекой Turbo Vision, все было красиво и умно, но только больше по размеру. Вот и надо было тогда начинать рубить бабло 1С помнится 5.0 для DOS была. Был бы сейчас полноценный франч где нибудь в Челябинске.
11 Живой Ископаемый
 
02.11.15
11:53
Ну, тех, кто должен оповещать придется таки инициализировать. Единтсвенное что, я не знаю, есть ли в юнити или в дот.нете ленивая инициализация - то есть при создании большого класса инстансы мелкого еще не инициализируюится. до тех пор, пока они не понадобятся
12 Rizhij_Nikitos
 
02.11.15
11:56
(11) это кстати мысль. Надо покурить эту тему... Я чет забыл про ленивую инициализацию.
13 scanduta
 
02.11.15
12:04
(0) все остальные классы сцены бесцеремонно, по-требованию лезут в главный класс, обращаются к его свойствам и методам, а так же через него к свойствам и методам объектов, к которым есть доступ у главного класса.

Мне кажется все нормально. Ты пытаешься усложнить. А вообще все зависит от объемов
14 Rizhij_Nikitos
 
02.11.15
12:07
(13) это нарушает один из главных принципов ООП - слабые связи.
15 Ненавижу 1С
 
гуру
02.11.15
12:08
1С-ники любят неопределено и пустые ссылки
а ты тут про ООП
16 orefkov
 
02.11.15
12:24
При нынешних мощностях компов мелкое улучшение производительности кода совершенно по барабану. А со сложностью нынешних средних программ на первое место выходят вопросы не производительности (её и так за глаза), а проверямости и верифицируемости кода.
Поэтому - разделяй, властвуй, доминируй. Всё должно быть как можно более мелким, каждый винтик должен как можно меньше знать обо всём механизме и уметь общаться только с парой-тройкой ближайших соседей двумя-тремя фразами. Ничего страшного, если данные от одного края дойдут до другого через пять посредников - всё это делается быстро.
17 Rizhij_Nikitos
 
02.11.15
12:25
(15) я сам 1Сник, но хочу запустить второе направление по разработке игр, соответственно сейчас пашу в три лица на студию, делаю свой проект и еще и во франче основная работа. Вопрос по-прежнему открыт, жду грамотных ООПшников.
18 Rizhij_Nikitos
 
02.11.15
12:25
(16) Буду проверять... Просто игра в браузерах, а слабые компы могут и покривиться.
19 Злопчинский
 
02.11.15
12:38
(7) Приведите оригинал, чтобы я смог выверить и поставить твой (R) у себя в файлике девизов...
.
у меня это сграблено так:
"1Сники молчаливо согласились, что они "неполноценные программисты" и втихаря гребут бабло лопатой в то время, как "настоящие программисты" обсуждают отсутствие ООП в 1С." - но авторстов утеряно
20 shpioleg
 
02.11.15
12:45
Я так понимаю, главный класс это некий "глобальный модуль" со статическими функциями и переменными. Так почему другие  объекты лезут туда бесцеремонно?
21 Волшебник
 
модератор
02.11.15
12:47
22 Волшебник
 
модератор
02.11.15
12:48
(19) Там ещё и продолжение есть:
Я думаю, это молчаливый заговор. Программисты 1С не сильно спорят, что у них нет ООП. Во-первых, в холиваре никого не переубедишь, а во-вторых, чтобы "настоящие программисты" не покусились на их кусок пирога да бутербродик с маслицем и с икорочкой.
23 R0m1n
 
02.11.15
12:51
(0)почему бы не разместить вопрос на тематических форумах по юнити и геймдеву? там все таки люди шишек набили уже. кстати, читал помниться пару статей, что для юнити нужно не ООП парадигму применять, а КОП(компонентно-ориентированное программирование).
24 Rizhij_Nikitos
 
02.11.15
12:55
(23) почитаю про КОП, спасибо. А по поводу других сообществ - уважаю только Мисту.

(20) типа того, только вот тут так нельзя - тут этот главный должен всех остальных управлять.
25 senior
 
02.11.15
12:58
(0) друг ты не тот форум выбрал для обсуждения ООП, сейчас тебе скажут, что ООП это усложнение и вообще оно не нужно
26 R0m1n
 
02.11.15
12:59
(24) советую, как минимум, еще обратить внимание на официальный форум англоязычный. один из огромных плюсов юнити - это её сообщество и АссетСтор. все выходящие ассеты обсуждаются именно на офф. форуме,причем ответы дают сами разрабы.
27 Draziw
 
02.11.15
13:05
(0) У тебя же игра, она должна быть в один момент времени в одном состоянии. Какие еще подписки и события. Главный класс через sington. Это же не сервер с транзакциями к базе данных.
28 Phace
 
02.11.15
13:06
Какое ООП, осваивать надо ООБД
https://ru.wikipedia.org/wiki/Объектно-ориентированная_база_данных

Без этого тру-программистом точно не станешь!
29 Xapac
 
02.11.15
13:10
есть гланый статический класс, который имеет доступ к различным объектам

типа синглетон с блекджеком
30 Xapac
 
02.11.15
13:11
(0) присылай проект посмотрим, может ты чё не понимаешь
31 DimVad
 
02.11.15
13:17
У меня ощущение, что у нас серьезное количество вакансий есть по :
1. 1С
2. Web
3. Сисадминство

Всё остальное - "для души". А лучше просто забыть, и "для души" заниматься чем-нибудь иным. Прыгать с вертолёта или вышивать крестиком... ;)
32 Woldemar177
 
02.11.15
13:18
(31) фотографировать тощих моделей в темноте
33 DimVad
 
02.11.15
13:25
(32) Тоже понятный вариант развлекухи. А вот развлекуха с ООП в C# - это странное занятие... ;)
34 Draziw
 
02.11.15
13:25
(29) В клиенте игры так и должно быть по-моему.
Текущая игровая логика и сцена должны быть в единственном экземпляре.
Правда я не понимаю почему объекты запрашивают у главного класса данные, я бы рулил главным классом объектами и передавал в них все нужные им данные. Ну т.е. в вот например в главном классе происходит расчет физики, на основе этих расчетов он говорит объектам там перемещаться, уже давая им траектории или координаты, в каких случаях объекты могут опрашивать главный класс я хз.
35 Xapac
 
02.11.15
13:25
"например в главном классе происходит расчет физики,"

физика в юнити расчитыается вне главного класса.
36 Draziw
 
02.11.15
13:28
(35) хм, ну может быть.
37 Xapac
 
02.11.15
13:34
(36)там добосляешь компонент "боди" и он сам всё считает.
38 Лодырь
 
02.11.15
13:40
(31) Зато узкие редкие специалисты подчас могут стоит очень и очень дорого.
39 Rizhij_Nikitos
 
02.11.15
13:46
(32) как только "для души"# начинает приносить денег больше чем 1основная работаС даже с учетом перспективы, начинаешь задумываться. Ни в коем случае не хочу чтобы тред превращался в деньгосрач, поэтому просто оставим эту тему.
Просто с 5 лет я играл в игры и к сегодня наиграл уже достаточно, чтобы авторитетно высказывать свое мнение по каким-либо вопросам, а когда тебе еще и везет с возможностями углубляться в этом направлении, надо брать и использовать такие возможности. Это что касается души.

По поводу состояний игры и расчетов, управлений главным классом: игра танки, риалтайм, многопользовательская, главный класс управляет дофига чем, соответственно и все подряд службы, UI, механика, передвижения, клиент-серверная часть и обмен данными, полно всего лезет в главный класс сцены
40 Draziw
 
02.11.15
13:56
(39) В общем я бы не стал переделывать все, если лезет, значит надо :) мало мальски бы привел просто с порядку, если там уж адский бардак, но ломать то что работает только потому что не по принципам ООП, не стал бы.
41 Xapac
 
02.11.15
14:04
(39)блицкриг 3 переписываешь?
42 DimVad
 
02.11.15
14:04
(38) Чистая правда. Одна проблема - не долго... ;) Чел сперва укакается, чтобы туда пролезть, потом чуть-чуть побудет в желаемом качестве, потом окажется, что нужны уже совсем другие "узкие специалисты" и совсем в другом месте...

Я специализировался на C++ MFC в начале "нулевых". Был в команде "писателей ГИСа". Моё имхо - по соотношению деньги/усилия по сравнению с 1С - полный отстой...

Есть такая жутко глупая вещь - погоня за "успехом"... ;)
43 Xapac
 
02.11.15
14:05
(42)как-то встречали специалиста по прокладке кабелей.
кабелей карл!!!
44 ДенисЧ
 
02.11.15
14:07
(43) Если ты думаешь, что правильно проложить кабель - это просто, ты сильно заблуждиваешься
45 DimVad
 
02.11.15
14:08
(43) Кста, это лучше, чем учить C#. Тут микрософт не изменит все принципы в будущем году... ;)
46 Draziw
 
02.11.15
14:12
Кстати, к разговору о никому не нужной работе :)
Я вот пишу движок сам :) никак не могу бросить и взять Unity или на худой конец libgdx :) Причем периодически поглядывая в исходники libgdx понимаю что он написан значительно лучше, чем то что рожаю я, но бросать жалко :)))
47 Ненавижу 1С
 
гуру
02.11.15
14:21
Даёшь ООП в 1С!
48 ДенисЧ
 
02.11.15
14:26
ООП не нужен!
49 Draziw
 
02.11.15
14:26
(47) Ой да вы с процедурным программированием то справится нормально не можете, какое вам ООП :)))
50 Ненавижу 1С
 
гуру
02.11.15
14:41
(49) больше функциональщины в массы!
а так, да, но я стараюсь - за год не написал ни одного GOTO
51 Господин ПЖ
 
02.11.15
14:47
прямо god object какой-то из антипаттернов
52 bolobol
 
02.11.15
15:16
(47) А можно пример того, что можно было бы лучше сделать, будь в 1С ООП ? (кстати, я бы ещё и поспорил о заслуге 1С, что ООП применять при конфигурастии в общем-то и не требуется вовсе от слова совсем)

Пример или примеры. Что особо требуется заООПить?, в будничном кодинге, разрабинге?
53 Xapac
 
02.11.15
16:08
(50) а надо писать гото?
54 ДенисЧ
 
02.11.15
17:05
(50) Фу быть таким...
55 bolobol
 
02.11.15
17:11
Хм... А Ф12 на гоуту работает?
56 Serginio1
 
02.11.15
17:29
(52) Например замыкание это конечно не ООП, но его очень не хватает, так же как и IntelliSense. Учитывая транчсляцию 1С в JS я бы предпочел язык типа TypeScript
57 Господин ПЖ
 
02.11.15
17:31
>так же как и IntelliSense.

за это спасибо неявной типизации - тут ооп вообще сбоку
58 Serginio1
 
02.11.15
17:45
(57) Я сейчас не трогаю ООП. Я говрю чего не хватает.
Сейчас языки совмещают в себе и ООП и функциональщину и статическую и динамическую типизацию.
TypeScript в этом плане очень симпатичный язык. И при этом для него перевели кучу JS библиотек.
59 bolobol
 
02.11.15
17:59
(56) "Например замыкание" - вот уж чего, а мест где 1С "замыкает" - предостаточно!, казалось бы, при чём тут ООП ))
60 Serginio1
 
02.11.15
18:18
(59)  Что и кого 1С замыкает?
Немодальные диалоги без замыканий это еще то извращение.
Или создание универсальных функций различными условиями
v8: Отбор с условием
61 bolobol
 
02.11.15
19:06
(60) Я отвечу уклончиво...: если замыкание короткое - просто удлините его!
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан