Ответы пользователя по тегу Программирование
  • Как определять ответственность функций?

    @red-barbarian
    Вопрос о лифте не должен быть оторван от предметной области. )))
    Вопрос не в том как сделан лифт и что он умеет. Вопрос должен быть "что нам требуется от лифта?".
    Т.е. как мы его используем. Остальное отбрасываем как ненужное.
    При таком подходе, вопросы про космос решаются сами собой.
    Ответ написан
    2 комментария
  • Нужно ли перед C++ учить С?

    @red-barbarian
    Если планируете сделать карьеру как участник олимпиад, то подходите к c++ как к улучшенному c. В этом случае си изучать отдельно не нужно.
    Если планируете сделать карьеру разработчика на с++, то изучение с будет скорее вредом. Есть старая истина, чем лучше человек знает с, тем труднее ему выучить с++. Причина в разных парадигмах программирования - процедурном и объектно-орентированном.
    Ответ написан
    Комментировать
  • Какие есть варианты решения данной задачи(которые сам придумал и случайным образ усложнил)?

    @red-barbarian
    у каждого человека есть состояния - носитель, больной, здоровый.
    вероятность заболевания зависит от количества контактов с носителями. и некого коэффициента передачи инфекции.
    Больной становиться здоровым через средний период (длительность болезни) по нормальному распределению.
    Ну примерно такова предметная область.

    остальное моделирование.
    ссылка на https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D...
    Как-то сам моделировал такое. Весной. Пора инфекций. )))
    Ответ написан
    6 комментариев
  • Как повысить уровень программирования?

    @red-barbarian
    мое мнение.
    все банально)
    хотите быть писателем, много читайте.
    все хорошие книги типа "чистый код" это как теория. как должно быть и что делать. писать свой код очень полезно, но без критики (вычитки) можно писать, то что понятно себе и не понятно через год самому.
    чтение хорошего чужого кода прививает, как говорят, вкус. незаметно.
    ну и знать основы. например SOLID. эти принципы направлены на то что-бы разбить систему на максимально независимые и понятные части.
    еще думаю полезно будет изучить ТДД. по моему очень полезно.
    Ответ написан
    Комментировать
  • Как формируется документ в программе MS DOS?

    @red-barbarian
    Посмотрите кодировку cp866
    Там начиная с b0 до df символа которыми можно рисовать таблицы.
    Ответ написан
    Комментировать
  • Рандом число из нескольких диапазонов?

    @red-barbarian
    v = rand(1,100-8)
    если v> 17 то v = v+8
    получится равномерное распределение вне зависимости от длины диапазонов
    Ответ написан
    Комментировать
  • Не могу разобраться с случайным выводом цветных символов в Pyhon?

    @red-barbarian
    если консоль понимает ANSI коды, то
    import random
    import string
    GREEN = '\033[92m'
    RED = '\033[91m'
    ENDC = '\033[0m'
    x=list(string.ascii_uppercase+string.digits)
    for i in range(10):
        random.shuffle(x)
        y = [GREEN+l if  random.random() > 0.1 else RED+l for l in x]
        print(*y)
    
    print(ENDC)
    Ответ написан
    Комментировать
  • Как правильно составить диаграмму классов?

    @red-barbarian
    Вообще, это правильный подход к диаграммам. )
    Вот что писал Боб Мартин:
    "Возьмите за правило выбрасывать ненужные UML-диаграммы. А еще
    лучше, не создавайте их на постоянном носителе. Рисуйте на доске или
    на клочках бумаги. Почаще стирайте с доски и выбрасывайте эти об-
    рывки. Не привыкайте к инструментарию CASE или к графическим ре-
    дакторам. Для таких инструментов есть свое время и место, но жизнь
    большинства UML-диаграмм недолговечна."
    Хотя, далее, некоторые полезно и сохранять. Общий дизайн системы (идея) или те моменты которые из текста программы будет сложно понять.

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

    По картинкам:
    у нас есть объекты
    связь 0, связь 1, ...связь 3
    так же объект шина из связей.
    общее для них это они все имеют имя.
    также они имеют некоторые правила передачи сигналов.
    Это дает нам два класса Net и Bus. Кроме того Bus включает в себя много Net.
    Далее хотелось бы , что бы эти классы были независимы от правил. т.е что бы правила мы могли назначать сами. возможно динамически. Поэтому net и bus имеют метод назначающий правила rule (с общим интерфейсом) (которые можно менять, и не менять реализацию net, bus ).
    Итого Выделили общие свойства из net, bus в абстрактный класс AbstractNet. bus включает много net. Вынесли правила (которые будут часто меняться и которые мы возможно еще не знаем) за общий интерфейс.
    примерно так. упрощенно.
    Ответ написан
    6 комментариев