Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Результаты опроса: используете ли вы ооп
да 238 86.55%
нет 37 13.45%
Голосовавшие: 275. Вы ещё не голосовали в этом опросе

 
 
Рейтинг 4.76/461: Рейтинг темы: голосов - 461, средняя оценка - 4.76
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386

Стоит ли использовать ООП?

09.02.2010, 13:44. Показов 103067. Ответов 793
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Возник такой вопрос: стоит ли использовать ооп. Даже не так, когда использовать ооп?
Иногда (даже чаще всего) легче написать простые функции, а не мутить с классами обектами и методами.
Раздражает инкапсуляция - какой вообще ее смысл? Чтобы получить переменную класса по правилам ооп нужно создавать метод для ее чтения? когда такой подход оправдан - ведь затрачивается куча лишнего времени.
5
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2010, 13:44
Ответы с готовыми решениями:

Стоит ли использовать ООП -- часть вторая
У людей задающих подобные вопросы не все в порядке с пониманием ООП. Например, в параллельной теме человек интересуется: На самом...

Какие РЕАЛЬНО есть причины НЕ использовать ООП?
Появился такой вопрос. Все мы знаем о шумихе вокруг ООП, спорной идее наследования, других невнятных идей которых можно добиться...

Где стоит использовать bootstrap и стоит ли вообще использовать CSS фреймворки?
Здравствуйте. Лично я ужасаюсь ковырять стили, когда к сайту подключен bootstrap и мало понимаю, чем он хорош вообще. В данной теме я бы...

793
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.12.2013, 11:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Нитонисе Посмотреть сообщение
От применения приватных данных такой пользы пока не вижу
Когда будешь работать в команде из 100 человек, по крайней мере половину из которых можно считать безответственными, тогда в полной мере появится понимание
1
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
30.12.2013, 12:07
Цитата Сообщение от korvin_ Посмотреть сообщение
Не нужно усложнять сверх необходимого, а не всегда когда можно. Разделение доступа — это необходимость для обеспечения целостности и непротиворечивости объекта.
В чем выражается целостность и непротиворечивость? И чем это полезно программисту? Если пользы нет, то объявление член класса приватным - означает усложнение к нему доступа (функции Get и Set) на пустом месте. Оккама против

Цитата Сообщение от Evg Посмотреть сообщение
Когда будешь работать в команде из 100 человек, по крайней мере половину из которых можно считать безответственными, тогда в полной мере появится понимание
Об этом я с самого начала говорил, что ООП вообще больше годится для случаев, когда над проектом трудится много программистов. Но даже в этом случае у меня сомнения на счет приватных данных. Если данные класса могут понадобиться другим классам, то нужны методы Get и Set. И кто мешает другому программисту изменить состояние объекта вашего класса, используя эти методы?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
30.12.2013, 12:10
Цитата Сообщение от Нитонисе Посмотреть сообщение
В чем выражается целостность и непротиворечивость? И чем это полезно программисту? Если пользы нет, то объявление член класса приватным - означает усложнение к нему доступа (функции Get и Set) на пустом месте.
Контрактное программирование
2
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.12.2013, 12:15
Цитата Сообщение от Нитонисе Посмотреть сообщение
И кто мешает другому программисту изменить состояние объекта вашего класса, используя эти методы?
Само по себе изменение состояние объекта класса ничего плохого не несёт. Главное — чтобы это изменение не нарушало инвариантов класса. Функции доступа к полям класса (Get/Set) как раз позволяют проследить за тем, чтобы этим полям не были присвоены некорректные значения.

Помимо контроля за корректностью значений поля, эти геттеры/сеттеры могут выполнять дополнительные функции, например, запись в лог, работу с кэшем и т. д.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
30.12.2013, 12:25
Цитата Сообщение от Нитонисе Посмотреть сообщение
В чем выражается целостность и непротиворечивость?
В отсутствии возможности привести объект в некорректное состояние, когда, например, значение площади круга не соответствует его радиусу.

Цитата Сообщение от Нитонисе Посмотреть сообщение
И чем это полезно программисту?
Локализацией ошибок и упрощению системы в целом.

Цитата Сообщение от Нитонисе Посмотреть сообщение
Если пользы нет, то объявление член класса приватным - означает усложнение к нему доступа (функции Get и Set) на пустом месте.
Кто сказал, что там будет обязательно Set? Может быть только Get.

Цитата Сообщение от Нитонисе Посмотреть сообщение
Оккама против
Да, он против непонимания его принципа.

Цитата Сообщение от Нитонисе Посмотреть сообщение
Если данные класса могут понадобиться другим классам, то нужны методы Get и Set. И кто мешает другому программисту изменить состояние объекта вашего класса, используя эти методы?
Если такие методы будут, то они и позаботятся о корректном изменении состояния.

C++
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
struct Date {
    int Year;
    int Month;
    int Day;
}
 
Date d(2013, 12, 30);
d.Day = 32; // 32.12.2013 - ???
 
 
 
class Date {
    int Year;
    int Month;
    int Day;
public:
    ...
    void setDay(int day) {
        if (day < 1 || day > lastDayOfMonth(Year, Month)) {
            return;
        }
        Day = day;
    }
}
 
Date d(2013, 12, 30);
d.setDay(32); // 30.12.2013 - OK
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.12.2013, 12:32
Цитата Сообщение от Нитонисе Посмотреть сообщение
Если данные класса могут понадобиться другим классам, то нужны методы Get и Set. И кто мешает другому программисту изменить состояние объекта вашего класса, используя эти методы?
Ещё раз. ООП - это СТИЛЬ программирования, а не техника. Если ты захочешь - никто тебе не помешает. Точно так же, если ты захочешь взять нормальную программу и превратить её в гавнокод - никто тебе не помешает. Вся защита в Си++ - на уровне исходного текста, в первую очередь такая защита нужна как защита от своих собственных ошибок, а не защита от злонамеренных действий
1
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
30.12.2013, 15:29
Цитата Сообщение от korvin_ Посмотреть сообщение
В отсутствии возможности привести объект в некорректное состояние, когда, например, значение площади круга не соответствует его радиусу.
Так, давайте будем смотреть на конкретном примере, а то слишком много теории.

C++
1
2
3
4
5
6
7
8
9
10
class Rectangle
{
  public:
    double B;
    double H;
 
  public:
    Rectangle(double b, double h) : B(b), H(h) {};
    double CalcArea() {return B*H;}
};
Длину и ширину прямоугольника я сделал публичными. Покажите - как можно "испортить" этот класс. И как от этой "порчи" поможет избавиться размещение данных класса в приватной зоне.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.12.2013, 15:35
Цитата Сообщение от Нитонисе Посмотреть сообщение
Длину и ширину прямоугольника я сделал публичными. Покажите - как можно "испортить" этот класс.
C++
1
2
Rectangle rect = Rectangle(4, 5);
rect.B = -10;
Цитата Сообщение от Нитонисе Посмотреть сообщение
И как от этой "порчи" поможет избавиться размещение данных класса в приватной зоне.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Rectangle
{
  private:
    double B;
    double H; 
  public:
    /* ... */
    void setB(double value)
    {
        if (value <= 0)
            throw invalid_argument("value must be positive");
        B = value;
    }
    /* ... */
};
Но, как я уже говорил, роль getters/setters не ограничивается проверкой значений на корректность.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,117
Записей в блоге: 2
30.12.2013, 17:36
Цитата Сообщение от Нитонисе Посмотреть сообщение
Ну например, если повторяющийся код обернуть в функцию, ..
Или взять например ссылку. ..
Или виртуальные функции. ..
Польза может быть всякой. От применения приватных данных такой пользы пока не вижу.
"Такой" пользы от private конечно нет и не будет. Смысл таких вещей как private и др (напр const методов) в том что программист устанавливает правила которым обязуется следовать сам, и заставляет это делать других, пользующихся его кодом.

Цитата Сообщение от Нитонисе Посмотреть сообщение
Так, давайте будем смотреть на конкретном примере, а то слишком много теории.
На таком примере ничего не увидеть (хотя и здесь контроль диапазона - верный пример). Вообще пока Вы берете один класс (без разницы простой или сложный) - никаких проблем нет. Они начинаются когда классы начинают взаимодействовать друг с другом. Понятно что один класс что-то должен знать о другом - иначе этого другого никак не использовать. Но вот "сколько" - это баааальшой вопрос Прямолинейный подход - да просто все о всех знают! (все public) очень быстро оказывается плохим, тупиковым. Ну это надо пережить/прочувствовать на практике.
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
30.12.2013, 19:09
Цитата Сообщение от Nameless One Посмотреть сообщение
Но, как я уже говорил, роль getters/setters не ограничивается проверкой значений на корректность.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Rectangle
{
  class Execption;
 
  public:
    double B;
    double H; 
 
  public:
    double CalcArea() 
    {
      if (B < 0 || H < 0) throw Execption;
      return B*H;
    }
};
Ну вот, подсчет площади всегда будет корректный.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.12.2013, 19:46
Цитата Сообщение от Нитонисе Посмотреть сообщение
Ну вот, подсчет площади всегда будет корректный.
Удачной отладки, чо.

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

Как только ты присвоил полю H некорректное значение, можешь считать, что твой объект поломан. Узнать, что он поломан, ты можешь только вызвав метод CalcArea и получив исключение. Но от момента "поломки" объекта до вызова CalcArea может произойти какое-то время, и сам вызов этот может произойти в совсем другой точке программы. При этом ты уже не сможешь узнать, в каком именно месте ты передал неверные данные.

Также не стоит забывать, что доступ к этим полям всегда может вернуть некорректные данные, поэтому тебе придётся их проверять.
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
30.12.2013, 21:09
Цитата Сообщение от Nameless One Посмотреть сообщение
Как только ты присвоил полю H некорректное значение, можешь считать, что твой объект поломан.
Проверку можно выполнять и вне класса.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.12.2013, 22:19
Нитонисе, ясное дело, что можно. Но для этого пользователям твоего класса нужно обязательно знать, какие допустимые значения могут принимать поля твоего класса. И не дай б-г они забудут сделать проверку перед тем, как записать некорректное значение в поле Rectangle — никакого внятного сообщения об ошибке они в этом случае не получат. В худшем случае даже самой ошибки (исключения) не будет, твоя программа просто продолжит работать неправильно.

А теперь рассмотрим пример чуток посложнее. Представь, что ты пишешь класс рациональных дробей (Fraction). Дроби поддерживают операции +, -, *, /. Класс использует два целочисленных поля — числитель и знаменатель, причем знак числителя определяет знак дроби. Сокращение дроби надо производить только тогда, когда понадобится её строковое значение либо значение её компонент (числителя/знаменателя).

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

Вот для сравнения код на Scala со свойствами:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
class Fraction(n: Int, d: Int) {
  require(d != 0, "Division by zero")
 
  var numer = n * d.signum
  var denom = d.abs
  var reduced = false
 
  def this(n: Int) = this(n, 1)
 
  def numerator = {
    reduce()
    numer
  }
 
  def numerator_=(value: Int) = {
    reduced = false
    numer = value
  }
 
  def denominator = {
    reduce()
    denom
  } ensuring (_ > 0)
 
  def denominator_=(value: Int) = {
    require(value != 0, "Division by zero")
 
    reduced = false
    if (denom < 0) numer = -numer
    denom = value.abs
  }
 
  private def gcd(a: Int, b: Int): Int =
    if (b == 0) a else gcd(b, a % b)
 
  private def reduce() {
    if (reduced) return
 
    val g = gcd(numer.abs, denom)
    numer /= g
    denom /= g
 
    reduced = true
  }
 
  def +(that: Fraction) =
    Fraction(this.numer * that.denom + that.numer * this.denom,
             this.denom * that.denom)
 
  def -(that: Fraction) = this + (- that)
 
  def *(that: Fraction) =
    Fraction(this.numer * that.numer, this.denom * that.denom)
 
  def /(that: Fraction) = this * that.reciprocal
 
  def reciprocal = Fraction(denom, numer)
  def unary_- = Fraction(- numer, denom)
  def abs = Fraction(numer.abs, denom)
  def signum = numer.signum
 
  override def toString = {
    reduce()
 
    val sign = if (numer < 0) "-" else ""
    val dPart = if (denom == 1) "" else "/" + denom
    sign + numer.abs + dPart
  }
 
  def abs(x: Fraction): Fraction =
    Fraction(numer.abs, denom)
}
 
object Fraction {
  def apply(n: Int, d: Int) = new Fraction(n, d)
  def apply(n: Int) = new Fraction(n)
 
  def zero = new Fraction(0)
  def one = new Fraction(1)
}
 
object IntExtensions {
  class Int2Fraction(a: Int) {
    def :/(b: Int) = Fraction(a, b)
  }
 
  implicit def int2Fraction(i: Int) = new Int2Fraction(i)
}
 
object Sample extends App {
  import IntExtensions._
 
  val oneThird = 1 :/ 3
  val oneSixth = 1 :/ 6
 
  // Fraction.one / Fraction.zero -> java.lang.IllegalArgumentException: requirement failed: Division by zero
  // oneThird.denominator = 0 -> java.lang.IllegalArgumentException: requirement failed: Division by zero
 
  println(s"one third plus one sixth is ${oneThird + oneSixth}")
}
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
31.12.2013, 02:20
Цитата Сообщение от Nameless One Посмотреть сообщение
Но для этого пользователям твоего класса нужно обязательно знать, какие допустимые значения могут принимать поля твоего класса.
Так. А мы говорим о коллективной разработке? Вообще-то я программирую один. О коллективной разработке я выше писал - возможно там принципы ООП будут действительно полезны. В том числе использование приватных данных. Чтобы судить более обоснованно - надо иметь опыт работы в команде. У меня такого опыта нет. Пользователь моих классов - это я сам. И я конечно же знаю какие допустимые значения у того или иного класса. И проверять значения данных на входе в класс может быть даже лучше, чем проверять их внутри класса. Потому что словив ошибку на входе - ее проще отработать. Если же ошибку генерирует класс, то обработка сложнее.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
31.12.2013, 05:57
Цитата Сообщение от Нитонисе Посмотреть сообщение
Так. А мы говорим о коллективной разработке? Вообще-то я программирую один.
Да без разницы. Не факт, что ты сможешь сразу вспомнить все подробности о классе, который написал N дней назад.

Цитата Сообщение от Нитонисе Посмотреть сообщение
И я конечно же знаю какие допустимые значения у того или иного класса
А ты попробуй представить что-нибудь посложнее класса прямоугольника.

Цитата Сообщение от Нитонисе Посмотреть сообщение
И проверять значения данных на входе в класс может быть даже лучше, чем проверять их внутри класса.
Допустим, ты забыл написать такую проверку, в результате полю присвоилось некорректное значение, и (через некоторое время) программа упала. Дальше тебе нужно отладить программу: 1) выяснить, почему именно она упала (некорректное значение для поля), 2) каком месте это некорректное значение было присвоено полю, 3) в каком месте это некорректное значение было получено. В случае проверки внутри setter'а мы получим stacktrace, который даст ответ на вопросы 1) и 2) и упростит ответ на вопрос 3).

В конце концов, проще и логичнее написать одну проверку внутри класса, чем N внешних проверок.

Цитата Сообщение от Нитонисе Посмотреть сообщение
Потому что словив ошибку на входе - ее проще отработать. Если же ошибку генерирует класс, то обработка сложнее.
Аргументируй.



А вообще, для себя ты можешь писать как угодно, хоть циклы на безусловных переходах делать.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
01.01.2014, 23:53
Цитата Сообщение от Нитонисе Посмотреть сообщение
Длину и ширину прямоугольника я сделал публичными.
Проблемы начнутся, когда Вам понадобится расширить функциональность Вашего класса, а именно - Вам нужно будет как-то дополнительно реагировать на изменение размеров прямоугольников. Модель ООП предполагает, что прямоугольник сам "знает", что нужно сделать при изменении его размеров. Да, в простейшем случае нужно просто сохранить новые значения в переменных. А на практике все может быть сложнее. Например, нужно будет сравнить старое значение с новым, и, если оно изменилось, сохранить его где-то в базе. Преимущество класса в том, что такие доработки можно сделать в одном месте, отладить на отдельных тестах и включить в проект, не изменяя ни строчки основного кода.

Но еще раз повторю уже прозвучавшую мысль: ООП - инструмент. Если Вам трудно работать с ООП - не работайте.

И еще одно повторю: ООП не столько инструмент программирования, сколько инструмент организации предметной области. Грубо говоря, о проекте проще думать уже в терминах ООП. И опять же - если Вам это не подходит - не используйте
3
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
02.01.2014, 15:02
Black Fregat, позволю себе добавить: использование интерфейсов в отличии от публичных методов позволяет расширять класс, не изменяя его кода. Например, навесить функционал логирования, профилирования или кеширования результатов сложных вычислений через декоратор, прописав его инициализацию в фабрике. Пользователь объекта даже не узнает, что работает с экземпляром другого класса, что позволит избежать изменений в коде этого пользователя.

Кроме того, использование интерфейсов позволяет производить полную подмену реализации. Например, использовать различные стратегии вычислений в зависимости от доступных наборов инструкций.
0
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
02.01.2014, 16:22
Цитата Сообщение от Black Fregat Посмотреть сообщение
Но еще раз повторю уже прозвучавшую мысль: ООП - инструмент. Если Вам трудно работать с ООП - не работайте.
Да я сейчас не про ООП говорю, а только про один из его принципов - инкапсуляцию. В частности введение приватных данных. Возможно какой-то резон в этом есть, когда функции доступа не являются примитивными.
C++
1
2
3
4
5
6
7
8
class A
{
  public:
    void SetValue(int v) {Value = v;)
    int GetValue() {return Value};
  private:
    int Value;
};
Но если они именно такими примитивными и являются, то использование приватных данных явно не оправдано из-за усложненного доступа. Ну разве что предполагать, что при дальнейших модификациях эти функции доступа могут стать сложнее. Или на это и расчет?

Что касается ООП в общем, то я считаю кое-где этот принцип использовать можно. Но важно не перестараться и очень умело выделять сущности. Часто можно все обернуть в классы и тем самым усложнить все сверх меры. Если отдавать себе отчет в том, какую конкретно можно извлечь пользу из объектного подхода - тогда ООП может облегчить разработку.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.01.2014, 16:30
Цитата Сообщение от Нитонисе Посмотреть сообщение
Или на это и расчет?
В том числе. В отладчике можно поставить брейкпоинт на метод SetValue (или просто поставить printf) и оттрассировать все модификации
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
02.01.2014, 16:32
Цитата Сообщение от Нитонисе Посмотреть сообщение
Но если они именно такими примитивными и являются, то использование приватных данных явно не оправдано из-за усложненного доступа
Что значит в данном случае «усложнённый доступ»?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.01.2014, 16:32

Стоит ли учить ООП в одно время с Яп
Добрый день! Начал активно изучать c#. Читаю Шилдта в свободное от учебы время и стараюсь практиковаться и всё выходит пока нормально. Но...

Как использовать ООП в WinAvr
Класс я создал. А вот объект класса создать не получается! Полазив по интернету выяснил что оператор new не поддерживается компилятором! ...

Js class как правильно использовать ООП
Накидал вот такой простенький код, авторизация проходит, data.Access_token существует, но в this.Access_token почему то не сохраняется, не...

Когда следует использовать ООП в РНР?
Когда стоит учить ооп в РНР, если новичок в РНР? Стоит ли писать весь код в стиле ооп ?

WITH AS стоит ли использовать
Использую СУБД Postgresql, есть запрос SELECT * FROM Table1 WHERE Filed1 IN (SELECT Fileld1 FROM Table2 WHERE Fileld2='A' AND...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
420
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru