Крутые определения, одобряю)). Определения уровня абстракции не выводиться, их тех определений, по умолчанию, но это определение мне нравиться, хорошее.
А последний последние утверждение, как-то обрывает логическую цепочку. Это уже с другого источника?
Поддерживаю nazarpc, недавно прочитал, полезно было, понял все (ну я так думаю), и понял, что понял бы ничего если бы читал ее лет 5-8 назад.
Книга явно для тех, кто уже с опытом.
Офигенно разная у нас терминология, скажу я вам). Где учились, если не секрет? Это для диссертации копаете?
Допустим мы нашли что класс имеет 10 нарушений абстрагирования с коэффициентами [1, 1, 1, 3, 1, 3, 5, 4, 1, 1], тогда интегральный коэффициент нарушения будет равен сумме этих значений = 21, что и описано в формуле. Да, формальные правило вычисления коэффициента — самое сложное, и не доросла наука еще вообще то.
Программирование оно в большинстве своем эмпирическое. Дейкстра, Кнут другие формализуют его, делают из него науку, но таковым оно еще пока рановато, чтоб говорить о чем-то научном. И если хотите говорить научно, прежде всего дайте определение уровню абстракции.
Если getCount приватный, либо унаследованный — все нормально, иначе будет не понятно чего именно это getCount. В абстракции дома, понятие getCount вообще не должно существовать, а в абстракции массива — getCountOfFlat.
Все равно, в упор я тут не вижу принципа суперпозиции.
Я не опустил формулировку power, там написано.
Метрики могут быть разные, общепризнанная не существует (не видел), дельта также зависит от расположения звезд, важности проекта и всего прочего. Она не одна для всех, собственно и метрики могут быть разными для каждого проекта.
Я не говорил и не думал, что нарушение принципа MVC (парадигмы?) не является нарушением абстрагирования.
Конечно, я не очень верно выразился. Это величина не абстрактная, а вполне себе реальная, и к ней даже можно метрику пристроить, но она слабо формализована и от того, качественную метрику пристроить очень сложно. Первое приближение такое:
f(class) = Σ(power) для всех нарушений, где power — критичность нарушения, например целочисленная [1..5] и тогда, просто нужно будет для выделить все возможные нарушения и их критичность.
Но на это нельзя опираться, это ненаучно (в том варианте в котором я его описал).
Не понял, причем там суперпозиция… Если класс имеет нормальную абстракцию, то, от того, что вы о нем будете думать, не зависит нарушает он абстракцию или нет. То бишь, достаточно чтобы существовала абстракция, для которой класс не нарушает свой «уровень абстракции», и тогда, класс не нарушает уровень абстракции вообще. Следует сделать оговорку, что если существующая абстракция притянута за уши (например, класс реализует методы отрисовки массива данных, как кольцевой двусвязный список), то класс таки нарушает собственную абстракцию, поскольку в базовом представлении опирается на другую абстракцию…
В примере с getCount и getCountOfFlat нарушение потому, что getCount относится к абстракциям структур данных, а getCountOfFlat уже к более высоким, уровням абстракции бизнес логики.
Я, на основе своего скромного опыта, вам скажу, что применять MVC к проекту — неправильно, MVC должен быть только для графического интерфейса, как бы странно это не звучало, но это длинная, толстая, другая тема.
Без примера, нигде не вижу в ваших MVC моделях, контроллерах нарушений абстрагирования.
Я не просил. Карму сливают либо просто так, из презрения, либо потому, что считают, что вы должны были лучше ознакомиться с подобными вопросами и начать что-то учить, вместо создания нового вопроса.
Чтобы программировать игры нужна математика (минимум тригонометрия и метод координат, в идеале — высшая математика, численные методы, мат. анализ, куча всего). Не забывайте учить.
Я начинал программирование с GameDev на паскале, и весьма успешно начинал. Через 1.5 года после начала, у меня уже был 3D shooter с приличным fps под DOS.
По С# книгу порекомендовать не могу, выберите что-то популярное. Читайте, делайте примеры и все будет хорошо).
Время займет оно минут 10, на протяжении 1-5 дней.
Честь дороже. Тут другая проблема, сложно понять, автор специально так сделал, или это подстава со стороны хостера / сайта / домена.
Бесконечные циклы — основа основ.
while (true) {}
whie (!terminated) используется чуть ли не во всех GUI и сетевых приложениях. И обработчики событий — работают внутри бесконечного цикла. А в основе таких циклов обычно лежит от sleep до waitForMultiplyObjects..., которые минимизируют потребление ресурса процессора.
Но в общем, вы правы, для C# так делать крайне не желательно, у нужна некая событийная модель.