Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 181 19 38
Зачем нужны объекты? Аноним 17/02/23 Птн 01:05:25 2613923 1
i(4).webp 14Кб, 900x900
900x900
Сап программач. Изучая различные источники я читал про классы и обьекты и так и не вкурил, зачем нужно создавать экземпляры класса и через него вызывать методы, нежели все обьявить в статик и не мучаться с созданием экземпляров?
Аноним 17/02/23 Птн 09:52:35 2614058 2
>>2613923 (OP)

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

У всего есть своя сфера применения. Программированию как таковому десятилетия, за это время миллионы неглупых людей съели миллионы собак и выработали подходы к разным проблемам, в зависимости от того какую задачу и как нужно решить - т.н. парадигмы программирования.
Один из таких подходов - ООП, другой - функциональное программирование, третий - декларативное программирование, и т.д.

Современные языки программирования общего назначения как правило включают в себя элементы нескольких парадигм, имея в основе ООП. Как и почему так вышло? Да хуй его знает, вышло значит так надо. Изучай актуальные технологии и лучшие практики и не забивай голову философией, объяснений ты все равно не поймешь пока несколько лет не проработаешь в индустрии.
Аноним 17/02/23 Птн 10:46:00 2614107 3
>>2614058
Просто я не вижу особой разницы в создании обьекта. Например FileStream, вместо использования File. Это же куда проще, когда не нужно создавать экземпляры. Разве нет?
Аноним 17/02/23 Птн 11:14:56 2614141 4
>>2614107
Чем больше система, тем глубже должна быть систематезация. Для мелких проектов ооп нах не нужно, но в больших с ним проще, чем без него
Аноним 17/02/23 Птн 12:26:00 2614220 5
>>2613923 (OP)
> я читал про классы и обьекты и так и не вкурил, зачем нужно создавать экземпляры класса
Попробуй поразмышлять с позиции разработчика игр, чтобы понять ООП.

Каждая сущность в игре - экземпляр класса. Методы ей нужны, чтобы взаимодействовать с окружающим миром. Допустим, есть какой-нибудь зомби, у него внутри хранится количество здоровья. Чтобы нанести урон зомби, тебе нужно вызвать метод TakeDamage. Через этот же метод ты можешь передать информацию о том, что у тебя зачарованное оружие, которое поджигает врагов, после чего зомби загорится.

А ещё у тебя будет игровой цикл в котором ты будешь обновлять все сущности:
for (int i = 0; i < entities.length; i++)
entities.Update(deltaTime);

for (int i = 0; i < entities.length; i++)
entities.Render();
Аноним 17/02/23 Птн 12:54:56 2614242 6
>>2614107

Это примерно как "зачем парикмахеры стригут двумя-тремя разными машинками с разными насадками и несколькими видами ножниц, если можно ебануть одной машинкой под 3 мм?"
Ну ты понял.
Аноним 17/02/23 Птн 15:05:15 2614395 7
>>2614058
>Да хуй его знает, вышло значит так надо.
Обана. Карго-культист попался. Верун в авторитеты. "Путлер хуярит ядеркой - нулана - ну значит такнада".
Аноним 17/02/23 Птн 15:43:03 2614422 8
>>2614220
А когда у тебя в руках молоток, все предметы кажутся гвоздями.
Аноним 17/02/23 Птн 17:53:13 2614565 9
изображение.png 350Кб, 640x480
640x480
>>2614058
>сли что-то на длительном промежутке времени в конкурентной меритократичной среде стало популярным и успешным - значит оно достаточно хорошо и качественно решает какую-то реальную проблему, при этом как эта проблема сформулирована и детали реализации особо не важны и не надо ими забивать голову, может быть осознаешь их когда будет больше знаний и опыта.
Аноним 17/02/23 Птн 23:11:00 2614934 10
>>2613923 (OP)
Ну вот представь, у тебя есть 50 объектов "электродвигатель" в проекте, которыми надо управлять одинаково.

Очень быстро ты обнаруживаешь, что из одного дискретного сигнала "вкл/выкл" образуется небольшой адок из статических и динамических состояний. Например:
1. Выключен. (нет команды, нет сигнала обратной связи от контактора, нет сигнала од датчика оборотов)
2. Включается (есть команда, ждем сигнал контактора, ждем ОС от датчика оборотов)
3. Авария включения по контактору (таймер вышел, контактор не замкнут)
4. Авария включения по датчику оборотов...

У тебя все еще не возникло желание написать класс объекта Motor?

Когда в последний момент окажется, что ты забыл про аварию по сигналу от датчика тепловой защиты, и его надо добавть во все 50 кусков твоего статического кода, тогда такое желание точно возникнет. Но будет поздно, и не в этом проекте.
Аноним 18/02/23 Суб 00:59:13 2614991 11
>>2614989
>интернетом
Отрубило интернет - накрылись все движки.
Г - отказоустойчивостью
Аноним 18/02/23 Суб 01:43:33 2615003 12
>>2614989
>на каждый двигатель по контроллеру с интернетом
вот тут то тебе первый попавшийся мимо-студентик, сканирующий сетки nmap промышленную револющию и устроит

мимо-мамких хакер

техпроцесс в "облаке" - это как жопа в ломбарде
Аноним 18/02/23 Суб 01:51:38 2615006 13
изображение.png 304Кб, 1011x724
1011x724
изображение.png 1110Кб, 1280x720
1280x720
изображение.png 372Кб, 686x386
686x386
изображение.png 296Кб, 640x480
640x480
>>2614989
>поставлю на каждый двигатель по контроллеру с интернетом и буду апдейтить один и тот же код 50 раз

Проснись, ты обосрался.

Сименс как раз на такой ебучий случай реализовал ООП даже в контроллерах.

"Урок 3
Введение в HMI Faceplate

HMI Faceplate – это графический интерфейс типового устройства, например, датчика давления или регулирующего клапана.

Фейсплаты поддерживаются комфортными панелями оператора SIMATIC HMI Comfort Panels.

Фейсплаты конкретных устройств являются экземплярами (потомками) шаблона (предка).

В комфортных панелях таким шаблоном является тип данных Faceplate.

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

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

При наличии родственной связи экземпляры воспринимают все изменения своего предка даже после своего рождения.

Для наглядности будем называть разработчика HMI – конфигуристом, а разработчика программы PLC – программистом.

Рассмотрим процесс взаимодействия программиста и конфигуриста при разработке HMI для 100 типовых регулирующих клапанов на панели оператора в TIA Portal V14 для контроллеров старых серий S7-300/400 (процесс создания фейсплат для контроллеров новых серий S7-1200/1500 подробно рассматривается в уроке 5):

Программист разрабатывает PLC data type (тип данных ПЛК), который отражает связь данных между HMI и PLC.

На основании PLC data type конфигурист в библиотеке проекта разрабатывает Faceplate type (шаблон).

На основании шаблона конфигурист создаёт 100 экземпляров фейсплат для 100 клапанов.

На основании PLC data type программист создаёт 100 блоков данных, через которые программа PLC будет взаимодействовать со 100 фейсплатами.

Конфигурист создаёт HMI user data type со структурой, копирующей структуру PLC data type.

На основании HMI user data type конфигурист создаёт 100 HMI tags, связанных с блоками данных, созданных программистом на шаге 4.

Конфигурист привязывает 100 фейсплат к 100 тегам HMI (которые в свою очередь привязаны к блокам данных ПЛК).

Если теперь изменить в шаблоне-предке, например, цвет закрытого клапана, то во всех 100 фейсплатах-потомках цвет закрытого клапана также изменится.

Если на одном ПК в проекте уже есть шаблон с фейсплатами-потомками, то уже не получится привязать эти фейсплаты к другой версии этого шаблона, созданной на другом ПК.

В одном из следующих уроков рассмотрим, как это делается в TIA Portal. "
https://www.maxplant.ru/article/siemens_tutorial_3.php
Аноним 18/02/23 Суб 02:43:15 2615010 14
>>2615009
>че ты хотел сказать в скада уже клас мейн и массив с флагами дальше сервис лаер микросервисы там уже ооп классы данные функции но они никак не связаны с электродвигателями там только формулы.

https://www.youtube.com/watch?v=9HptYhedYMs
Аноним 18/02/23 Суб 16:39:22 2615470 15
Аноним 21/02/23 Втр 08:21:38 2618370 16
>>2614395

Лол
Хуй не отвалился еще - так передергивать?
Аноним 21/02/23 Втр 14:08:07 2618587 17
16769585231643.png 118Кб, 257x318
257x318
>>2614395
Колбасный фарш забыли спросить.
Аноним 22/02/23 Срд 13:41:26 2619567 18
>>2614220
>Чтобы нанести урон зомби, тебе нужно вызвать метод TakeDamage

Вызываю TakeDamage(Zombie, damage) вместо Zombie.TakeDamage(damage) и всяких объектов и наследования, что ты мне сделаешь?
Аноним 23/02/23 Чтв 19:02:02 2620842 19
>>2614220
Ты в одном посте умудрился нахуевертить целую кучу самых говеных антипаттернов, очевидных любому, кто хоть немного занимался разработкой хоть игр, хоть просто сколько-нибудь сложных систем.

И да, в геймдеве не используется объектно-ориентированное моделирование, с добрым утром.
Аноним 24/02/23 Птн 23:38:48 2622045 20
>>2613923 (OP)
Сейчас так фактически и происходит. Обработку данных выносят в синглтон сервисы, которые по сути являются более гибкой версией статик классов, а класс используют просто для хранения состояния.
Аноним 25/02/23 Суб 08:26:31 2622184 21
>>2619567
Молодец, ты только что изобрел то, во что у тебя компилятор превращает, изобреталель ecx this блеять
Аноним 27/02/23 Пнд 06:47:57 2624254 22
>>2613923 (OP)
ну типо вот создаешь ты игрушку, есть у тебя класс "солдат", а у тебя стратежка, тебе надо 10 солдатов. вот и создаешь ты 10 экземпляторов. понятно что это энциклопедический пример. и в жизни все сложнее, но суть такая, а как применить уже зависит от проекта. о чем вообще говорить когда сейчас везде ioc/di, а это огромная глобальная свалка объектов которые ты достаешь когда они тебе нужны.
Аноним 27/02/23 Пнд 16:08:02 2624624 23
>>2624254
>понятно что это энциклопедический пример
...того как делать нельзя, иначе получится неподдерживаемая лапша. Но мы же на харкаче, понятно, какой тут уровень.
Аноним 28/02/23 Втр 08:44:06 2625356 24
>>2613923 (OP)
> Сап программач. Изучая различные источники я читал про классы и обьекты и так и не вкурил, зачем нужно создавать экземпляры класса и через него вызывать методы, нежели все обьявить в статик и не мучаться с созданием экземпляров?
Они и не нужны. Вон Линукс вообще без петушиного ООП написан.
Аноним 28/02/23 Втр 08:58:48 2625361 25
>>2624254

Вообще наверное 99% usecase именно ООП - это разнообразный ORM.
Большая часть коммерции - это в основе базы (карточек товаров, складских запасов, пользователей и т.п.) - и в программировании такие сущности легче и логичнее всего обрабатывать как объекты.
Аноним 28/02/23 Втр 08:59:50 2625362 26
Аноним 28/02/23 Втр 14:24:44 2625751 27
>>2625356
Где-то читал, они там реализовывали виртуальные методы, лень искать. Так что пришлось велосипедить костыльное ООП на Си.
Аноним 28/02/23 Втр 14:44:17 2625785 28
>>2625751
Там вроде какие то костыльные деревья используются. Вообще, если рассматривать создание обьектов то в этом есть небольшой смысл. Хотя лично я бы сделал создание обьектов не на прямую из программы, а создавать каждый конфиг файл по отдельности. Мне кажется так будет удобнее
Аноним 28/02/23 Втр 16:17:56 2625866 29
>>2622045
А инкапсуляция в этих сервисах возможна?
Аноним 28/02/23 Втр 19:23:58 2626131 30
>>2613923 (OP)
Ты только что Си.

struct Rect rect1;
struct Rect rect2;

init_rect(&rect1, 0, 0, 10, 10);
init_rect_from_rect(&rect2, rect1);


struct Rect rect3;
rect3 = intersect_rect_with_rect(rect1, rect2);

struct Circle circle;
char flag = 0;
intersect_rect_with_circle_safe(rect3, circle, &flag);
Аноним 28/02/23 Втр 19:24:29 2626134 31
>>2614220
>Попробуй поразмышлять с позиции разработчика игр
ECS
C
S

И ооп идет нахуй.
Аноним 28/02/23 Втр 19:43:23 2626151 32
>>2626134
Посчитай количество игр на ООП и на ECS, и станет ясно, что на хуй идет ECS.
Аноним 28/02/23 Втр 19:47:45 2626154 33
>>2626151
Ну так в играх ООП не настоящее, а тупо какой нибудь одноранговый глобальный массив.
Аноним 28/02/23 Втр 21:16:13 2626240 34
>>2626151
>Посчитай количество игр на ООП и на ECS
На ECS на порядок-два больше.
Аноним 28/02/23 Втр 21:23:36 2626245 35
>>2625751
>Так что пришлось велосипедить костыльное ООП на Си.
Почему пришлось то? Зачем? Кто-нибудь может сможет наконец ответить на вопрос треда "Зачем ООП нужен" ?
Аноним 28/02/23 Втр 21:29:25 2626250 36
>>2626245
Значит полиморфизм им нужен был, а тебе не нужен?
Аноним 28/02/23 Втр 21:34:44 2626253 37
Аноним 28/02/23 Втр 21:35:33 2626254 38
>>2626151
А если написано формально на ООП языке, но наследование не используется, а используется композиция?
Аноним 28/02/23 Втр 21:36:05 2626255 39
>>2626245
Тебя в чатГПТ забанили?
Аноним 28/02/23 Втр 21:43:17 2626261 40
>>2626255
Ну вообще то да, я из РФ
Аноним 28/02/23 Втр 22:51:25 2626314 41
>>2626245
ОП частично ответил на свой вопрос. Вообще зависит от реализации - "а нахуй оно нужно". Например используя статический File. Writeallbytes() вроде бы оно и заебись, однако FileStream дает некоторые возможности. Например задать какие нибудь атрибуты файлу и т.д. конечно это не самый лучший пример, т.к. статические методы все еще кажутся "лучше". Еще один пример и он более годный т.к. наглядный - использование винформ а так же контролов. Обьекты сами по себе нужны для большой модульности. Чтобы не переписывать одно и тоже. Допустим у нас есть контрл "батон". И этих батонов мы можем напиздячить сколько угодно, при этом их можем изменить. Статик же не позволит создавать обьекты, и будет выглядеть не правильно. Тут же мы создаем обьект, можем раскрасить кнопку, изменить текст и т.д. Вообщем, понимать суть "обьектов" достаточно трудно ибо годных обьяснений и "а нахуя это нужно" особо нету.
Аноним 01/03/23 Срд 00:00:09 2626370 42
>>2626314
Насколько я знаю, на бытовом объекты разделяются по принципу границ, разграничения... Ну например: стол, он ограничен поверхностью дерева, на границе с воздушной средой, человек ограничен кожей. Конечно это переупрощение... Например кастрюля без крышки является тонким листом металла, надо вводить еще виртуальную поверхность. Дальше, мы как-то должны различать один объект от другого, а еще объединять объекты в другой объект (ну, мы же объединяем волосы в объект борода), сравнивать их свойства, давать им названия.
Кажется, этим занимается https://ru.wikipedia.org/wiki/Онтология_(информатика)
Аноним 01/03/23 Срд 00:05:01 2626372 43
>>2625866
Инкапсуляция тут не нарушается. Наружу так же торчат геттеры/сеттеры, а в сервисный слой передается объект. Вынос логики в сервисы нужен для соблюдения принципа единственной ответственности.
Аноним 01/03/23 Срд 08:39:19 2626474 44
>>2626370
Кек, блять. Хуею с местных философов. А если это что-то бестелесное? Например, у тебя объект Message - где у него поверхность?
Аноним 01/03/23 Срд 10:06:25 2626515 45
>>2626372
И в чем тогда отличия от ООП?
Аноним 01/03/23 Срд 12:29:04 2626585 46
>>2626515
А кто сказал, что есть отличия? Отличия есть только в сумеречном мире ОПа. Он почему-то думает, что вся обработка данных объекта должна находится в рамках класса, но это не так. Формулировка "Инкапсуляция это хранение данных и методов их обрабатывающих в одном месте в пределах класса" ошибочна. Инкапсуляция это когда у тебя данные отделены от интерфейса, который предоставляет класс. Например, у тебя есть класс Book в котором есть List<Page> наружу будет торчать интерфейс readPage(index), а все остальные действия со списком Page для потребителя будут закрыты. Потребитель даже не знает, хранишь ты эти Page в списке или где-то еще. Это и есть инкапсуляция.
Аноним 01/03/23 Срд 13:54:14 2626644 47
>>2626474
Ну анон, даже в вики про это упомянуто. Не надо демагогией то заниматься.
Например, у слов есть граница в виде пробелов, и так далее.
Аноним 01/03/23 Срд 15:38:53 2626715 48
>>2626585
>Формулировка "Инкапсуляция это хранение данных и методов их обрабатывающих в одном месте в пределах класса" ошибочна

Это как раз букварная формулировка, а то что ты рассказываешь - это абстракция.
Аноним 01/03/23 Срд 15:49:36 2626720 49
>>2626372
Звучит как буллщит, потому что для обработки тебе нужны какие-то знания о внутреннем представлении объекта, а значит либо дырявый public и любой может зайти на задний двор, или клоунский friend.
Аноним 01/03/23 Срд 17:24:45 2626794 50
>>2626720
Нет не нужны. Для работы с объектом тебе нужен интерфейс, который он предоставляет и это все.
Аноним 01/03/23 Срд 17:29:15 2626798 51
>>2626794
Значит, реальная обработка будет внутри объекта, как оно и есть в обычном ООП.
Аноним 01/03/23 Срд 17:52:32 2626824 52
>>2626715
Боже, какие блять тупые итт. Да, абстракция тесно связана с инкапсуляцией. Это как раз отделение абстракции от реализации.
>инкапсуляция предназначена для изоляции контрактных обязательств абстракции (протокол/интерфейс)
https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
>букварная формулировка
Это устаревшая букварная формулировка из книги 2005 года. Тогда еще не было клин кода и дрочева на солид.
Аноним 01/03/23 Срд 17:53:14 2626825 53
>>2626798
Нет не будет. Что ты подразумеваешь под реальной обработкой?
Аноним 01/03/23 Срд 18:02:23 2626830 54
>>2626715
Ты мне на собесе даешь такую формулировку, я у тебя спрашиваю: "Каким образом в таком случае ты планируешь обеспечить принцип единственной ответственности для этого класса? Допустим у нас есть класс Employee. Отдел HR хочет знать в каких активностях он когда либо участвовал. Бухгалтерия хочет посчитать для него зарплату исходя их количества отработанных часов и часовой ставки. Руководитель хочет получить связанные с ним события прихода и ухода с работы. Ты собираешься реализовать все эти методы в этом классе? Но ведь тогда у тебя будет больше одной причины для его изменения." Твои действия?
Аноним 01/03/23 Срд 18:02:52 2626831 55
>>2626824
>инкапсуляция предназначена для изоляции контрактных обязательств абстракции (протокол/интерфейс)

Ну вообще-то "предназначена" != является.
В англ. вики вообще так:
Encapsulation allows developers to present a consistent and usable interface which is independent of how a system is implemented internally

Я склоняюсь к тому что это просто хуевый перевод.

>Это устаревшая букварная формулировка из книги 2005 года

Ну а про интерфейсы вообще хуй пойми откуда.
SOLID к слову в 2000 году сформулировали.
Аноним 01/03/23 Срд 18:05:25 2626832 56
>>2626825
Любую. Ну например конкатенация строк. Никак ты ее не сделаешь в сторонней сервисной функции, если только видишь внутреннее устройство строки. Поэтому логичнее иметь конкатенацию методом класса строка.
Аноним 01/03/23 Срд 18:06:09 2626834 57
>>2626831
Сформулировали в 2000, а популярным стало после выхода Clean Code в 2007
Аноним 01/03/23 Срд 18:10:38 2626836 58
>>2626830
Если так делать, до можно довести до абсурда и утверждать, что в каждом классе должен быть всего 1 метод.
Аноним 01/03/23 Срд 18:22:47 2626851 59
>>2626830
>Ты мне на собесе даешь такую формулировку, я у тебя спрашиваю: "Каким образом в таком случае ты планируешь обеспечить принцип единственной ответственности для этого класса

Пиздец сегвей. Какая связь вообще со словарным определением инкапсуляции, лол?
Какое-то буквоедство если честно.

>Твои действия?

Хуй его знает, я сам 9 месяцев назад вкатился лол. Мне по работе SOLID особо не вперся, я просто делаю примерно как уже было сделано до меня и исправляю после правок сеньора-помидора (если таковые имеются).

По уму-то наверное надо IEmployee делать с общей инфой, или абстрактный класс, и от него уже наследовать EmployeeHR, EmployeeAccounting, EmployeeManagement и т.п. для разных потребителей с нужными полями и методами, и соответствующие запросы к базе и маппинг писать.
А вообще сильно зависеть будет от того как это все в базе хранится, как оттуда дергается, как уже реализованы подобные темы в существующем коде и т.п. - может получится что эта информация уже другим запросом параллельно и так дергается, а я второй раз буду в базу долбиться. По тикету короче смотреть надо конкретную задачу, а не по примерам таким в вакууме.
Аноним 01/03/23 Срд 18:40:11 2626862 60
>>2626832
Адаптеры с утилитарными методами в виде оберток над примитивами изначально были идеей не очень и в последствии пришлось пилить всякие StringUtils и NumberUtils в jave, например. Но твой пример в целом неудачный, потому-что это по сути даже не полноценные объекты, а просто как я выше написал адаптеры к примитивам с утилитарными методами обработки.
Аноним 01/03/23 Срд 18:49:03 2626871 61
>>2626851
>Пиздец сегвей. Какая связь вообще со словарным определением инкапсуляции, лол?
Ну ты же должен и инкапсуляцию соблюсти и SRP. Как ты это сделаешь следуя своей формулировке?
Аноним 01/03/23 Срд 18:50:09 2626872 62
>>2626851
>По уму-то наверное надо IEmployee делать с общей инфой, или абстрактный класс, и от него уже наследовать EmployeeHR, EmployeeAccounting, EmployeeManagement и т.п. для разных потребителей с нужными полями и методами, и соответствующие запросы к базе и маппинг писать.
Мы тебе перезвоним.
Аноним 01/03/23 Срд 19:06:03 2626884 63
3a8.png 19Кб, 889x1175
889x1175
Аноним 01/03/23 Срд 19:13:30 2626889 64
>>2626862
Ну понятно, уволены из объектов в примитивы.
А по мне так примитивы - это недообъекты где забыли сделать приватность.
Аноним 01/03/23 Срд 19:25:30 2626915 65
Аноним 01/03/23 Срд 19:27:29 2626920 66
>>2626862
Представь себе что у нас есть просто String, как набор байт, и PackedString, как в с++, когда длинная строка это указатель на массив, а короткая (до 8) хранит байты прямо вместо указателя. Это деталь внутренней реализации.
Теперь если мы делаем внешний StringUtils который конкатенирует строки, мы можем только выделить новую строку размером под сумму наших, а PackedString придется ее потом переупаковывать обратно - всегда оверхед. Либо мы сливаем StringUtil детали реализации, нарушая инкапсуляцию. При этом таких проблем нет если конкатенация внутри самой PackedString, потому что она знает детали реализации и сама умно выберет, выделать память или упаковать.
Аноним 01/03/23 Срд 19:28:54 2626924 67
>>2626915
Предположу, что ты промахнулся ответом, или не понял что тебе написали.
Аноним 01/03/23 Срд 19:33:05 2626931 68
>>2626924
Промахнулся, но суть не в этом. Ты тоже долбоеб, влез со своими нерелевантными обертками. У них в принципе не может быть причин для изменения. Речь идет о классах, которые ты будешь писать для решения бизнес задач.
Аноним 01/03/23 Срд 19:35:07 2626932 69
>>2626920
Ну собственно в этом и заключается проблема. Теперь ты жестко привязан к внутренней реализации и тебе надо залезть внутрь класса чтобы что-то поменять. Это еще и опен-клозед нарушает. Алсо, в джаве строки и так иммутабельные, если что.
Аноним 01/03/23 Срд 20:25:36 2626985 70
>>2626932
> Теперь ты жестко привязан к внутренней реализации и тебе надо залезть внутрь класса чтобы что-то поменять
Так в данном случае это плюс, а не минус.
А иначе у тебя фабрика через фабрику и боксинг анбоксинг на каждый чих.
>Алсо, в джаве строки и так иммутабельные
Мертвый язык.
Аноним 01/03/23 Срд 22:44:39 2627125 71
>>2626985
Согласен, в данном случае да. Тут важно помнить, что solid это не серебряная пуля, нужно помнить зачем он вообще нужен. Спор вообще был о том, что определение инкапсуляции как хранения данных и методов в пределах класса устарело. Ну как бы два стула: либо оно устарело и не отображает текущее положение вещей, либо solid противоречить базовым принципам ООП, в частности нарушает инкапсуляцию.
Аноним 02/03/23 Чтв 08:22:10 2627331 72
>>2627125
>нарушает инкапсуляцию

Каким образом?
Аноним 02/03/23 Чтв 20:52:31 2627957 73
>>2627331
Почитай >>2626915
Методы надо в сервисном слое хранить, а не в классе.
Аноним 02/03/23 Чтв 22:46:13 2628047 74
>>2627957
Тебя вчера обоссали, мало?
Аноним 03/03/23 Птн 00:11:57 2628120 75
>>2628047
Ты разве что обоссаться на интервью от страха можешь, чмоня. Не преувеличивай свои возможности. Так что ты имеешь сказать в итоге на статью дяди Боба, уеба?
Аноним 03/03/23 Птн 00:19:24 2628132 76
>>2628120
Дядя - умный инфоцыган, и писать правильное решение загадки он не стал.
Аноним 03/03/23 Птн 00:51:20 2628143 77
Аноним 03/03/23 Птн 01:04:21 2628147 78
>>2628143
Покажи где конкретно у дяди Боба в статье сервисный слой.
Аноним 03/03/23 Птн 01:37:43 2628162 79
>>2628147
У дяди боба не може быть сервисного слоя, потому что сервисные слои в анемичной доменнойя модели, а у дядя боба рич модель.
Аноним 03/03/23 Птн 01:42:18 2628165 80
0 5qiQ0O4N2JIfT[...].png 493Кб, 1000x746
1000x746
Аноним 03/03/23 Птн 01:46:24 2628166 81
>>2627957
Ну я доябываюсь потому что ты пишешь:
>Почитай дядю боба
>Методы надо в сервисном слое хранить, а не в классе.
>неучи
А потом оказывается что у дяди Боба ничего про сервисные слои, это вообще другая модель, надо просто поверить...
Аноним 03/03/23 Птн 02:50:05 2628187 82
>>2626932
А в чём проблема залезть внутрь класса?
Аноним 03/03/23 Птн 03:55:46 2628196 83
>>2619567
>TakeDamage(Zombie, damage)
А если у зомби резисты какие-то есть к дамагу, которых нет, например, у Mutant уникальная логика в одинаковом методе у похожих объектов? Будешь на каждый тип моба метод с префиксом/постфиксои писать? А если у тебя этих объектов под сотню?
Аноним 03/03/23 Птн 08:02:00 2628241 84
Аноним 03/03/23 Птн 08:22:46 2628250 85
>>2627957

Так можно допиздеться до того чтобы каждый метод и каждое поле в своем отдельном классе хранить. Колесо провернулось, ДВАЧ ЗАЧЕМ НУЖНЫ ОБЪЕКТЫ?!
Аноним 03/03/23 Птн 08:28:26 2628255 86
>>2627957

SOLID - это принцип, и рекомендация. В отличие от инкапсуляции, которая есть буквально один из признаков и элементов словарного определения ООП, и которой SOLID кстати не противоречит примерно никак.
Так же как например буклет по ораторскому искусству не противоречит звуку которому соответствует буква А.
Аноним 03/03/23 Птн 09:47:32 2628297 87
>>2628241
Так наверно 99,999% проектов на всех ооп языках такую модель имеют. Как только кто-то говорит в начале проекта, а давайте сразу будем рич модель, DDD вот это все, тут же начинается "Да сильно сложно, у нас мало времени до релиза"
Ну и сейчас стала неактуальна с микросервисами эта дилемма.
Аноним 03/03/23 Птн 10:46:24 2628321 88
>>2613923 (OP)
Потому что объект это как живое существо, у него есть данные которые он инкапсулирует, и методы, т.е. ты ему можешь сказать что нужно сделать, а он тебя поймёт если у него есть этот метод.
Если у тебя методы отдельно а данные отдельно, то не достигается инкапсуляция, считай как ты вскрыл человека и засунул ему еду в желудок и вытащил дерьмо из кишечника, а он сам должен жрать и срать. Т.е. говоря более обще, объект это инкапсуляция, а инкапсуляция это автоматизация, т.к. ты же не хочешь бегать вокруг человека и лазить ему в анус, тебе надо чтобы человек сам себя обслуживал, вот тут принцип тот де.
Аноним 03/03/23 Птн 10:47:28 2628322 89
Аноним 03/03/23 Птн 11:00:19 2628324 90
>>2628321
Причём забавно, что микросервисные архитектуры подошли ближе к тому самому ооп, нежели то как принято сейчас писать на джаве, шарпе и тем более крестах. Микросервис это тоже своего рода объект, только инкапсуляция в нём форсится гораздо жёстче, т.е. чтобы сделать его действительно инкапсулированной сущностью не нужно даже напрягаться, проявлять какую-то дисциплину и т. п. (ну на самом деле нужно, чтобы не раздувать сервисы до размера монолитов), всё как бы само происходит.
Аноним 03/03/23 Птн 13:48:14 2628461 91
>>2628241
Эту статью дядя Боб написал? Нет?
Напомнинаю что ты писал
>Почитай дядю боба
>Так что ты имеешь сказать в итоге на статью дяди Боба, уеба
А потом начались маневры.
Аноним 03/03/23 Птн 14:55:39 2628541 92
Жил-был дядя Боб,
Толоконный лоб.
Пошел Боб по базару
Посмотреть кой-какого товару.
Навстречу ему программист Балда
Идет, сам не зная куда.
«Что, Боб, так рано поднялся?
Чего ты взыскался?»
Боб ему в ответ: «Нужен мне умелец:
фронтендер, бекендер и за сервером сиделец.
А где найти мне такого
Работничка не слишком дорогого?»
Балда говорит: «Буду служить тебе славно,
Усердно и очень исправно,
В год за три щелка тебе по лбу,
Есть же мне давай вареную полбу».
Аноним 03/03/23 Птн 20:57:15 2628865 93
>>2628461
Так что на статью то сказать можешь?
Аноним 03/03/23 Птн 21:00:42 2628869 94
>>2628324
Только вот в большинстве случаев, если копнуть, это оказывается сервис ориентированная архитектура, а не микросервисы. Так что ничего не изменилось.
Аноним 03/03/23 Птн 23:07:04 2629022 95
Аноним 03/03/23 Птн 23:09:24 2629025 96
Аноним 04/03/23 Суб 08:22:41 2629146 97
>>2629025
Но как по мне это костыли какие-то. У тебя есть один класс - надо что-то в него добавить и вместо того чтобы просто в него доьавить функционал ты городишь костыль сбоку.
Аноним 04/03/23 Суб 11:16:00 2629224 98
>>2629146
Спасибо, всем очень важно мнение вкатуна.
Аноним 04/03/23 Суб 11:26:52 2629235 99
>>2629224
Так объясни нормально вкатуну почему не дополняют существующий класс, а делают другой на его основе с новым функционалом.
Аноним 04/03/23 Суб 11:39:01 2629252 100
>>2629235
Чтобы у тех, кто пользуется оригинальным объектом, — ничего не поломалось?
Аноним 04/03/23 Суб 11:44:10 2629265 101
>>2629235
Только причем тут уточнение на основе?
OCP принцип применяется совместно с принципом prefer composition over inheritance. Наследование часто убивает пользу от OCP.
Аноним 04/03/23 Суб 11:46:44 2629275 102
>>2629265
То есть чтобы правильно следовать принципу OCP ты заблаговеременно должен создать расширяемый код, чтобы в него можно было заинжекнить другой клас модифицирующий поведение
Аноним 04/03/23 Суб 11:48:38 2629280 103
>>2629275
Идеальная ситуация когда ты только добавляешь код, не трогая уже написанные класы
Аноним 04/03/23 Суб 11:51:02 2629284 104
Аноним 04/03/23 Суб 12:59:30 2629401 105
>>2629252
> Чтобы у тех, кто пользуется оригинальным объектом, — ничего не поломалось?
А как оно поломается, если ты доьавляешь новые функции в класс, не трогая при этом старые? Зачем наследование делать то?

>>2629265
Более простыми словами объясни, желательно с примером
Аноним 04/03/23 Суб 13:36:22 2629417 106
>>2629401
https://pastebin.com/raw/3XT4vaUA
Ты все равоно не поймешь без практики. OCP это достаточно абстрактный принцип, одним примером не поянишь.
Вот здесь ты вместо того чтобы изменять код HelloPrinter когда тебе нужен новый тип приветствия, ты создаешь новый класс Helloworlder и передаешь его в конструктор HelloPrinter. Благодаря этому ты не заботишься, что поломал код, который испоьзует старое приветствие.
Аноним 04/03/23 Суб 19:27:35 2629779 107
>>2629417
А можно пример на питоне?
Аноним 04/03/23 Суб 19:49:03 2629796 108
>>2613923 (OP)
> не мучаться с созданием экземпляров
А что вместо этого создавать? Struct/record? Мучений меньше станет?
Аноним 04/03/23 Суб 21:14:03 2629878 109
Почему вообще от ООП ждут бесконечной расширяемости приложения. Это же просто метод организации кода. Как например, в простейшем случае с функциями - вместо копипасты одних и тех же вычислений оформляешь их в функцию и вызываешь ее. И если есть ошибка в вычислении, то она в одном месте, в этой функции. Ну а ООП - это просто более продвинутые методы организации существующего на данный момент кода. Да, некая запланированная расширяемость имеет место быть, но только пока она в рамках уже работающей схемы. Если новые фичи требуют изменения структуры программы, то все, надо переписывать.
Аноним 05/03/23 Вск 13:07:17 2630290 110
Все ещё не понимаю зачем это дробление. Получается что вместо класса Игрок с методами прыжка, стрельбы и прочего в одном месте у тебя есть почти пустой класс Игрок и производные от него классы пук_игрок(родительИгрок), среньк_игрок(родительИгрок) и ещё куча классов ..._игрок(родительИгрок).

Вместо одного класса получилось пара десятков на каждый чих.
Аноним 05/03/23 Вск 13:38:50 2630323 111
>>2630290
Ты не понимаешь. Для адептов ООП Чистый Код это как Далекие Берега, куда воины попадают после смерти на поле сражения. Таже для адептов ЧИСТЫХ ФУНКЦИЙ лямбда-исчисление это Совнгард где они их ждет Тьюринг с Чёрчем
Аноним 05/03/23 Вск 14:14:46 2630360 112
>>2630290
>Получается что вместо класса Игрок
Осталось только пригласить твоего лечащего врача, чтобы понять, почему в твоей голове получается именно так.
Аноним 05/03/23 Вск 15:52:04 2630496 113
Image 427.png 18Кб, 709x597
709x597
Image 428.png 26Кб, 701x872
701x872
>>2630360
>>2630323

Потому что я посмотрел примеры OCP в интернете. И эта хуйня выглядит именно так. Вместо одного класса PersonStorage, в котором хранилось 2 ( во втором случае добавили еще 1 метод, но не суть) метода, а в этом же коде по стандарту OCP уже высралось аж 4 класса по 1 методу.

Нахуя это все надо? Зачем тогда вообще вам классы нужны, если вы в них хуячите только по 1 методу? Чем это тогда отличается от обычных одиночных функций? Хули тогда не сделать просто 3 функции PersonDB, PersonJSON, PersonXML?
Аноним 05/03/23 Вск 15:53:55 2630502 114
>>2630290
> Игрок с методами стрельбы
Поймешь, когда попробуешь сделать разное оружие, например автомат и гранатомет, да еще чтобы можно было его бросать на землю и подбирать, а потом захочешь ввести нового персонажа с двумя оружиями.
>с методами прыжка
И когда будешь делать противников, начнешь везде копипастить код прыжка.

Глядишь так и до композиции, а там и ECS додумаешься.
Аноним 05/03/23 Вск 15:59:37 2630507 115
>>2630496
> Вместо одного класса PersonStorage, в котором хранилось 2 метода
Проблема в том, что такой класс должен уметь и файлы открывать, и к базам данным коннектиться, а то и к интернету.
Если такой класс в библиотеке, а мне нужна только запись в файл, мне все равно придется тащить в прогу либы для баз данных, когда они мне нахуй не нужны. А это не только вес, но и дыра в безопасности.
>Чем это тогда отличается от обычных одиночных функций?
Полиморфизмом.
Потому что ты вызываешь person.save() и оно само выберет основываясь на person. В твоем же случае тебе надо городить
if person is PersonDB:
personDBsave(person)
elif person is PersonJSON:
personJSONsave(person)
elif person is PersonXML:
personXMLsave(person)
Аноним 05/03/23 Вск 16:08:36 2630523 116
>>2630507
>Если такой класс в библиотеке, а мне нужна только запись в файл
Ну это уже проблема сторонних библиотек. Но мы говорим же про свой код.

>Потому что ты вызываешь person.save() и оно само выберет основываясь на person.
Каким боком? Тебе в save также надо будет писать if elif elif elif... Так в чем разница?
Аноним 05/03/23 Вск 16:09:56 2630526 117
>>2630496
Ты дебс? Цимес не в том сколько в классе у тебя методов. Ты по проекту размазываешь один метод или функцию. Потом тебе хочется изменить работу этой функции в каком-то аспекте. У тебя варианты.
1. Модифицировать эту функцию. И перетестировать решительно нахуй все что от этой функции зависит.
2. Изначально сделать так чтобы эта функция в нужно аспекте делегировала работу другому коду. Тогда она не будет зависет от аспекта и перетестировать не нужно. Это можно все и без ООП релизовать только будет куча бойлерплейта. В разы больше чем с динамическим полиморфизмом в ООП
Аноним 05/03/23 Вск 16:13:10 2630529 118
>>2630523
Ну ты точно не очень умный. Я тебе пример приводил, где ты меняешь поведение в месте использования, а не в самом классе.
Аноним 05/03/23 Вск 16:13:14 2630530 119
>>2630523
>ебе в save также надо будет писать if elif elif elif
Нет, ты же скинул сам 2й скрин где этого нет. Каждый класс умеет только одно.
Аноним 05/03/23 Вск 16:13:58 2630531 120
Image 4272.png 16Кб, 709x597
709x597
>>2630526
Да схуяли у тебя должно что-то сломаться? Вот решил ты в классе PersonStorage поменять метод save_to_json. Схуяли у тебя из-за этого должен вдруг сломаться метод save_to_database?
Аноним 05/03/23 Вск 16:18:12 2630539 121
>>2630530
Очевидно, что это делается в другом месте отдельно. Тут приведен пример OCP, а не вся рабочая программа же.
Аноним 05/03/23 Вск 16:18:14 2630540 122
>>2630531
Зачем тогда тебе класс?
Делай отдельные функции для сохранения в жсон и в базу. В реальном проете у тебя копипаста как снежный ком будет расти в таком случае
Аноним 05/03/23 Вск 16:18:24 2630541 123
>>2630531
С того, что ты мог поменять какую-то переменную person_state, которая может читаться в том методе.
Что-нибудь типа person_data_length, к примеру. Реальный случай был такой в какой-то с++ либе.
Аноним 05/03/23 Вск 16:18:49 2630544 124
>>2630539
Нигде не делается. Просто person.save().
Аноним 05/03/23 Вск 16:19:58 2630547 125
>>2630544
>Нигде не делается.
И каким хуем у тебя определяется во что сохранять - в db, json или xml?
Аноним 05/03/23 Вск 16:20:33 2630550 126
Аноним 05/03/23 Вск 16:21:15 2630552 127
>>2630540
>Зачем тогда тебе класс?
>Делай отдельные функции для сохранения в жсон и в базу.
Так я это и спрашиваю - чем ваш OCP принцип отличается от отдельных функий, если вы его и так дробите класс на 100 дочерних классов с 1 методом.
Аноним 05/03/23 Вск 16:22:11 2630555 128
>>2630550
Это все равно надо как-то где-то через if elif прописывать.
Аноним 05/03/23 Вск 16:25:44 2630562 129
>>2630552
Классы не тольк методы имеют, они еще данные инкапсулируют с которыми эти методы работают. А так вообще классы в основном используются как типы + динамическая диспечеризация методов
Аноним 05/03/23 Вск 16:30:25 2630566 130
>>2630555
Нет, если я использую только XML в данной программе, зачем мне создавать других персонов? Или это может из конфига загружаться без всяких if.
Аноним 05/03/23 Вск 16:30:52 2630567 131
>>2630552
Полиморфизмом. Тебе еще раз повторить?
Аноним 05/03/23 Вск 16:42:56 2630577 132
>>2630567
Но можно и без него обойтись без особых проблем.
Аноним 05/03/23 Вск 16:49:10 2630583 133
>>2630577
В laba.py несомненно. В жизни нельзя.
Аноним 05/03/23 Вск 16:51:54 2630590 134
>>2630583
Кармак как-то обходился без классов когда делал дум и квейк.
Аноним 05/03/23 Вск 17:01:33 2630614 135
>>2630590
Эмулировал их костылями.
Аноним 05/03/23 Вск 20:01:17 2630843 136
>>2630614
А почему Кармак не писал движки на языке, в котором были бы классы? Зачем он сидел на С, когда уже был С++?
Аноним 05/03/23 Вск 20:01:51 2630844 137
>>2630843
Либо не было компилятора, либо не умел.
Аноним 05/03/23 Вск 20:04:15 2630847 138
>>2630844
>Либо не было компилятора
Как его не может быть? С++ появился в 83, а игры он делал в 90-е.
>либо не умел
Да, лучший программист всех времен не освоил классы в С++ и поэтому сделал свои собственные. Звучит логично.
Аноним 05/03/23 Вск 20:06:02 2630850 139
>>2630847
>Как его не может быть?
Ну вот так. Может не купил его.
>Да, лучший программист всех времен
Так Торвальдс на Си пишет.
>не освоил классы в С++
Срармак мог и не освоить, где он там алгоритмы 3д украл, могли не объяснить.
Скажи спасибо что не фортране написал и ладно.
Аноним 05/03/23 Вск 20:25:21 2630868 140
>>2630850
>Срармак мог и не освоить, где он там алгоритмы 3д украл, могли не объяснить.
>Скажи спасибо что не фортране написал и ладно.
Пиздец хуйню высрал и рад.
Аноним 05/03/23 Вск 21:19:06 2630912 141
>>2630843
Классы тормозят и жрут память, а он не был макакой как современный скам вроде тебя. Это сейчас макакам плевать на производительность, главное чтобы проще было говношлепить говнокод, а тогда программисты так не думали, особенно в играх где каждая инструкция важна.
Аноним 05/03/23 Вск 21:36:25 2630916 142
>>2630912
Живые организмы жрут энергию! Какой позор! Срочно всем превратится из живых в неживые, чтобы востановить вселенскую гармонию!
Аноним 05/03/23 Вск 21:38:16 2630917 143
>>2630912
Хули ты порвался, долбоеб?
Аноним 05/03/23 Вск 21:40:16 2630918 144
>>2630916
Не понял, это макакины оправдания говнокода?
Аноним 05/03/23 Вск 21:43:19 2630919 145
>>2630918
Ну и зачем ты оправдываешь говнокод тактами процессора? Ты мазохист?
Аноним 05/03/23 Вск 21:49:10 2630926 146
>>2630843
Так крестам многие копротивлялись не потому, что ООП - это плохо, а потому что кресты - говеный язык. Но тем не меннее, с ростом сложности проектов, взвесив все плюсы и минусы, большинство переползло на Си++, в том числе и Кармак.
Аноним 05/03/23 Вск 21:56:59 2630932 147
>>2630919
Был бы говнокод, DOOM бы просто не пошел на компьютерах на которых шел.
Аноним 05/03/23 Вск 22:01:07 2630934 148
>>2630926
>кресты - говеный язык
Почему?
Аноним 05/03/23 Вск 22:53:12 2630968 149
>>2630868
Чего? Это общеизвестный факт что он просто переписал алгоритмы с научных пейперов по 3д из вузика.
Аноним 05/03/23 Вск 22:55:52 2630969 150
>>2630926
Кресты говеный только по сравнению с современными языками, которых тогда и не было либо они были невменяемо тормознутыми.
По сравнению с си - это как полет в космос.
Аноним 05/03/23 Вск 22:58:19 2630973 151
>>2630912
Просто компиляторы были тупые. Сейчас классы практически ничего не жрут и не тормозят.
Аноним 05/03/23 Вск 22:58:32 2630974 152
>>2630968
А обычно их переизобретают заново каждый раз что-ли?
Аноним 05/03/23 Вск 23:00:38 2630976 153
Аноним 05/03/23 Вск 23:04:57 2630979 154
>>2630974
Ты просто не сталкивался с сектой фанатов Кармака-величайшего погромиста, которые верещат как он изобрел вообще чуть ли не все на свете.
Аноним 05/03/23 Вск 23:33:29 2631006 155
>>2630973
>Сейчас классы практически ничего не жрут и не тормозят.
Потому что мощность компьютеров сейчас настолько высока, что эта разница стала незначительной. Но раньше компьютеры были слабые, плюс игра в софтварной эмуляции, без специализированных аппаратных ускорителей. То что сейчас практически незаметно, тогда имело серьезный вес. По хорошему надо было писать на ассемблере, но всё же сложность уже не та как в 2д, так что Кармак взял ближайшую альтернативу - Си, это максимальная уступка, дальше уступать в сторону С++ уже смысла нет, ведь уровень ведь абстракции првактически такой же, однако будет потеря производительности из за крестового говна в виде объектов и прочего.
Аноним 06/03/23 Пнд 14:07:20 2631500 156
>>2630968
>>2630979

Если это задача такая хуйня простая - почему это никто не сделал раньше? Сводить все заслуги Кармака к да он просто пару формул спиздил - это пиздец отбитым надо быть.
Аноним 06/03/23 Пнд 14:12:48 2631508 157
>>2631006
> По хорошему надо было писать на ассемблере, но всё же сложность уже не та как в 2д, так что Кармак взял ближайшую альтернативу - Си
Не совсем, он использовал и ассемблер:

Вульф написан на C + x86-совместимый язык ассемблера
Дум 1-2 тоже на С + язык ассемблера
Первый квейк тоже С + язык ассемблера

И только с Квейк 2 начал писать на чистом С.
Аноним 06/03/23 Пнд 14:24:53 2631519 158
1609020630108.png 437Кб, 639x361
639x361
>>2631500
В смысле не сделал? Ultima Underworld вышла на 2 месяца раньше вульфа. Ох уж этот швитой кармак...
Аноним 06/03/23 Пнд 14:48:34 2631546 159
>>2631519
У которой игровая область в 1\4 от размера всей картинки и которая шла в 1-2 фпс? Ебать технологии. Кармак первый, кто сделал это нормально.
Аноним 06/03/23 Пнд 15:43:46 2631598 160
>>2631546
Дебс, дум тоже шел в 1\4 на 1-2 фпс.
Аноним 06/03/23 Пнд 15:53:08 2631614 161
>>2631598
>Дебс, дум тоже шел в 1\4 на 1-2 фпс.
Что ты несешь, поехавший? Совсем на своей ненависти к кармаку кукухой поехал?
Аноним 06/03/23 Пнд 16:05:47 2631628 162
1598560380517.png 863Кб, 1282x801
1282x801
>>2631614
Сектант, поставь на реальное железо и посмотри. Там надо играть в милипиздрючном уменьшенном окошке, иначе 6 фпс.
Аноним 06/03/23 Пнд 16:27:53 2631653 163
>>2631628
Дебил, зачем ты пытаешься запустить игру 93 года на процессоре из 85? На 486 он точно идёт очень плавно. Да и чую ты пиздишь про 386, надо перепроверить
Аноним 06/03/23 Пнд 19:24:52 2631870 164
>>2631653
Потому что на таких и играли, свинопоридж. Когда DOOM был, были еще только 386-е и ниже, а 486 появились позже. Так что ничего и близко плавно не шло. Правно было только когда до максимума сжать окошко, но тогда толком ничего не видно. Приходилось играть на средне-уменьшенном окошке с умеренными тормозами.
Аноним 06/03/23 Пнд 19:50:07 2631893 165
>>2631653
А я чую ты пиздишь, что Ultima шла в 1-2 фпс.
Аноним 06/03/23 Пнд 20:36:30 2631940 166
.png 53Кб, 700x571
700x571
.png 78Кб, 679x548
679x548
.png 87Кб, 621x754
621x754
>>2613923 (OP)
Ну. Кхм.
Ну давай представим, что мы без объектов. Все статика.
Так вот. Смотри на прикриплейд 1. Все ок.
А теперь - на прикриплейд 2.

Как легко(как раз не очень легко) заметить, без ООП-срани и объектиков, вероятность на пустом месте выстрелить в ногу - уже на такой хуйне растет.

А теперь мы делаем с классами и прочей ООП-сранью(прикриплейд 3).
И чтобы работать с вот таким образом - мы обезопасили себя от того, что какой-то бака - передаст неверный невалидный хендлер, а у наз из-за этого все по пизде пойдет.
Аноним 06/03/23 Пнд 21:46:03 2632024 167
>>2631870
>Потому что на таких и играли, свинопоридж. Когда DOOM был, были еще только 386-е и ниже, а 486 появились позже.
Мудила, что ты несешь блядь?! 486 выпускались с 89 года, на момент выхода первого дума они продавались уже 4 года и были достаточно распространены.

>Так что ничего и близко плавно не шло. Правно было только когда до максимума сжать окошко, но тогда толком ничего не видно. Приходилось играть на средне-уменьшенном окошке с умеренными тормозами.
Дебич, если нет реального железа - поставь что-нибудь что эмулирует поведение реального 386 - PCem или досбокс с настройками под 386 на худой конец и посмотри своими глазами. Игра даже в полноэкранном режиме идет нормально. На глаз фпс явно больше 30 и даже при беге нет 6 фпс, как из твоего говноролика на ютубе.

>>2631893
А ты сам попробуй - я запустил и там фпс чуть ли не покадрово видишь как сменяется.
06/03/23 Пнд 21:51:58 2632031 168
>>2632024
>У меня на i9-139000 30 фпc
>на глаз
>значит и на 386 было 30
Как пересать орать с дауна?
Аноним 06/03/23 Пнд 21:54:53 2632034 169
>>2632031
Даун, ты? Ты хоть в курсе что такое PCem?
Аноним 07/03/23 Втр 08:27:00 2632289 170
>>2632024
> 486 выпускались с 89 года, на момент выхода первого дума они продавались уже 4 года и были достаточно распространены
gtx1080ti выпускались с 2017 года, на данный момент они продавались уже 6 лет, однако распространена только gtx1060.

Свиновориджу не понять, что реальность и педовикия это разные вещи. Не говоря о распространенности, речь ведь идет про Россию, а до России компьютеры должны сначала дойти, а это не бывтро, и не было интернета, скачать игру в день выхода никак не получится, пока не привезут из америки дискеты и эти дискеты не разойдутся из рук в руки пол всей России никакого дуума ты не увидишь, свинопоридж, 90-е это не твои обоссаные зумерско-пидорские времена цифрогого погоса у каждого дебила в кармане, и заказов из америки онлайн с доставкой тебе в анус.
Аноним 07/03/23 Втр 11:02:22 2632343 171
>>2632289
Малолетний долбоеб, хули ты порвался? Твои свинопориджи сейчас с тобой в одной комнате?
Аноним 07/03/23 Втр 11:08:56 2632348 172
>>2613923 (OP)
Там в другом проблема, почему-то базовый класс назван object, хотя должен быть class.
Аноним 07/03/23 Втр 11:10:44 2632352 173
>>2632343
Малолетние свинопориджи думают гугл заменяет мозги и знания, типа загуглил и уже эксперд по любому вопросу, можно авторитетно кукарекать. Нет не заменяет, наоборот, только наглядно показывает тупых имбецилов гуглоботов.
Аноним 07/03/23 Втр 12:26:12 2632425 174
>>2632352
Давай, долбоеб, покажи статистику распространенности 386 и 486 на момент 1993 года. Если у тебя ее нет - ты кукарекающий беспруфный петух.
Аноним 07/03/23 Втр 14:25:01 2632561 175
>>2632425
>сам придумал поеботу, сам её опроверг
Молодец, шизофреник, разговаривай с собой перед зеркалом или в палате, а не публично. Это свинство, срать шизой публично. Просто нечистоплотность тупой свинины, которыя снимает штаны и срет прямо посреди тротуара где люди ходят. Думаешь, никто пизды не дает за такое в интернете, значит всё можно?
Аноним 07/03/23 Втр 14:53:26 2632609 176
>>2632561
Дебила кусок, прекращай хрюкать. Пруфы твоих утверждений где?
Аноним 10/03/23 Птн 19:57:46 2636064 177
Image 440.png 629Кб, 998x725
998x725
Image 441.png 36Кб, 800x645
800x645
>>2632031
Откуда ты вылез? Современные эмуляторы копируют поведение старого железа с идеальной точностью. Вот результат реального 386SX на 16 мегагерц и результат виртуальной ПК с 386SX. Результат в 21.21 одинаков с точностью до сотых.

Результат виртуальной видеокарты тоже совпадает с реальным.

Так что поведение софта в этих эмуляторах точно такое же как и на реальном железе.
Аноним 10/03/23 Птн 21:46:34 2636154 178
>>2636064
Ну так это какой нибудь бенчмарк под который специально эмулятор затюнили. Ты игру на реальном запусти.
Аноним 11/03/23 Суб 00:04:45 2636304 179
>>2636154
Тупее этого ничего придумать не мог? Затюнили специально под бенчмарк досовский - пиздец шиза. Ещё затюнили под сотню других бенчей - им же делать нехуй.
Аноним 11/03/23 Суб 00:13:25 2636309 180
>>2636304
Чел, я сам делал поопкодовые эмули 8-битных процов, я знаю как там срезаются углы, тут мы делаем честную эмуляцию по байту, а тут не укладываемся и целиком пробрасываем вызов отрисовки на видеокарту целой картинки.
Аноним 11/03/23 Суб 04:34:33 2636399 181
>>2636309
А, ну раз ты так делал, то и другие также делают! Там в настройках можно десятки моделей 286/386/486/пентиум1 выбирать и материнки под них. С каждой мамкой - свое поведение. Там даже если на виртуальный жёсткий диск не тот тип ide шины укажешь для матери - хуй чё определится, а если количество секторов и прочей хуерги правильно не укажешь - вообще пиздец.

Я кстати нихуя не понимаю почему ставишь процессор на 16 мегагерц, в досе он как 386sx-16 определяется но в тесте производительности частота 12,5 почему-то. И так на любой частоте. Хуй знает почему просадочка.
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов