Найти в Дзене
Покупайте СтеллыИ дарите их за контент
3 месяца назад

Сериализатор

Если нужно часто сериализовать объекты различных классов в строку, то можно добавить следующий метод расширения. Этот способ сократит ваш код сериализации до obj.ToXml(). StringWriter пишет строку в UTF-16...

3 месяца назад

Феномен интерфейса

Интерфейсы. Изначально ООП обходилось без них. Позже в C++ была неудачная попытка использовать вместо них классы, которая, однако, привела к пониманию проблемы и открыла путь к её решению. Нужна была абстракция поведения вне классификации и интерфейсы воплотили её. Окружающие нас объекты дружно игнорируют SRP -- гвоздь, ведро, автомобиль помимо своего индивидуального поведения имеют и общее: их можно купить, у них есть положение и габариты и они ржавеют со временем. Для отражения общих черт не хватает иерархической классификации, при которой наследование поведения возможно лишь по одной линии...

4 месяца назад

Как посчитать факториал

Часто для решения задачи существует более одного пути. Предположим понадобилось вычислить eˣ через известный ряд: В выражение входит факториал и нам нужны его значения для разных n. Можно решить задачу в лоб, использовав рекурсию, цикл или таблицу (ведь значений, которые уместятся в int или long не много). Но у этих методов есть большой недостаток: n! быстро растет и мы исчерпаем возможности представления чисел до того, как достигнем желаемой точности. Но есть иной путь -- не считать факториал. Заметим,...

5 месяцев назад

История одной ошибки

"Поиск не затягивает дело, а ошибки -- затягивают." (Им покоряется небо) Однажды перестали автоматически обрабатываться заказы. При ручной обработке было выявлено, что сумма заказа рассчитанная системой заказов отличалась от суммы заказа, рассчитанной в учетной системе на несколько копеек. Это касалось лишь тех заказов, число позиций в которых было больше одной. Причиной расхождения была ошибка в расчете величины новой комиссии. До этого, комиссионные сборы рассчитывались на каждую позицию в отдельности...

11 месяцев назад

Наследование и полиморфизм

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

11 месяцев назад

Инкапсуляция

Наши программные объекты являются отражением объектов реальности, состояние которых неразрывно связано с поведением. Возьмем для примера мяч. Его состояние можно описать размером, массой и положением. Размер и массу в небольших пределах мы можем изменить подкачивая мяч, а положение -- пнув его. И в первом и во втором случае воздействие на состояние происходит не прямым изменением параметров состояния, а через поведение мяча, как реакция на взаимодействие с ним. Подкачивая мы увеличиваем количество...

Покупайте СтеллыИ дарите их за контент