Объектно-ориентированное программирование
-
Математические модели типов данных
Абстрактные типы данных (ADT): математическая модель для типов данных в информатике. Определение поведения, операций и отличия от структур данных.
-
Классы и объекты в объектно-ориентированном программировании.
Классы в программировании: определение, создание объектов, переменные экземпляра и класса. Объектно-ориентированное программирование, шаблоны кода.
-
Эйфель: Объектно-ориентированный язык программирования
Эйфель – объектно-ориентированный язык программирования, разработанный Бертраном Мейером для повышения надежности ПО. Стандартизирован ISO в 2005 году.
-
Множественное наследование в программировании
Множественное наследование в программировании: преимущества, недостатки (проблема ромба), виртуальное наследование и альтернативы. Объектно-ориентированное программирование.
-
Язык программирования Oberon: Простота и Эффективность
Oberon – язык программирования, разработанный Никлаусом Виртом в 1987 году. Улучшенная версия Pascal и Modula-2 с поддержкой расширения типов и наследования.
-
Паттерн проектирования "Посетитель"
Паттерн "Посетитель" в программировании: разделение алгоритмов и структуры данных. Добавление новых операций без изменения классов. Открытость/закрытость.
-
Постусловия в программировании: определение и применение
Постусловие в программировании: что это такое и зачем нужно? Узнайте о проверке условий после выполнения кода, использовании утверждений и документации.
-
Абстрактная фабрика: шаблон проектирования программного обеспечения
Абстрактная фабрика – шаблон проектирования ПО для создания семей связанных объектов без привязки к конкретным классам. Гибкость и расширяемость кода.
-
Сравнение языков программирования Java и C++
Java и C++: сравнение языков программирования. Отличия в синтаксисе, целях разработки и применении в высокопроизводительном ПО. Выбор языка для проекта.
-
Абстракция в компьютерных системах: методы и уровни
Абстракция в программировании: упрощение сложных систем путем обобщения данных и сокрытия деталей. Ключевые понятия: абстрактные типы, функции, наследование.
-
Прототипное программирование: наследование через объекты
Прототипное программирование: переиспользование объектов вместо классов. Наследование через клонирование и расширение прототипов. Объектно-ориентированный подход.
-
Паттерн проектирования "Одиночка" в объектно-ориентированном программировании
Паттерн Singleton в объектно-ориентированном программировании: гарантия единственного экземпляра класса, контролируемая инициализация и доступ к нему.
-
Обобщённое программирование: стили и реализации
Общий стиль программирования: алгоритмы без конкретных типов данных, повторное использование кода в C++, Ada и других языках. Уменьшение дублирования!
-
Библиотеки в программировании: концепция и виды.
Библиотека в программировании: что это такое? Коллекция ресурсов (код, данные, изображения) для разработки ПО. Упрощает создание программ и системных вызовов.
-
Шаблон проектирования "Легковес" в программировании.
Паттерн "Муха" в программировании: экономия памяти за счет совместного использования данных объектами. Оптимизация, повторное использование кода, GoF паттерны.
-
Шаблон проектирования "Снимок" (Memento)
Паттерн "Memento" в проектировании ПО: сохранение и восстановление состояния объекта. Реализация через originator, caretaker и memento. Откат изменений, версионирование.
-
Аспектно-ориентированное программирование: парадигма и реализация.
Аспектно-ориентированное программирование (AOP): повышение модульности кода за счет разделения сквозных задач. Добавление поведения без изменения кода.
-
Шаблон проектирования «Фабричный метод» в объектно-ориентированном программировании
Фабричный метод – шаблон проектирования в ООП для создания объектов без указания конкретного класса. Гибкость и расширяемость кода. 🏭✨
-
Шаблон "Прототип": Клонирование объектов в программировании
Шаблон "Прототип" в программировании: создание объектов клонированием, избегая затратных операций и наследования. Реализация через абстрактный класс и метод клонирования.
-
Шаблон проектирования "Композит" в разработке программного обеспечения
Паттерн "Композит" в разработке ПО: создание древовидных структур из объектов, позволяющее единообразно работать с частями и целым.
-
Паттерн проектирования "Декоратор" в объектно-ориентированном программировании
Паттерн "Декоратор" в ООП: добавление поведения объектам динамически без изменения класса. Расширяемость, гибкость, повторное использование кода.
-
Шаблон проектирования "Состояние" и конечные автоматы
Шаблон "Состояние" в программировании: поведенческий паттерн для изменения поведения объекта в зависимости от его состояния. Улучшает читаемость и поддержку кода.
-
Объекты в программировании: концепции и парадигмы.
Объекты в программировании: переменные, функции, данные. Объектно-ориентированное vs объектно-базированное программирование, классы и базы данных.
-
Классовые переменные в объектно-ориентированном программировании
Классовые переменные в ООП: общее свойство всех объектов класса. Отличие от переменных экземпляра, статическое выделение памяти и методы класса.
-
Парадигмы программирования: классификация и концепции
Программные парадигмы: классификация языков программирования, структуры и концепции реализации. Высокоуровневый подход к разработке ПО.
-
Множественная отправка и полиморфизм в программировании
Множественная отправка в программировании: динамический выбор функции на основе типов нескольких аргументов. Оптимизация кода и гибкость в разработке.
-
Объектно-ориентированное программирование в Common Lisp: CLOS и Метаобъектный протокол
CLOS: объектно-ориентированное программирование в Common Lisp. Мощная, динамическая система, вдохновленная Flavors и CommonLoops. MOP расширение.
-
Обобщенные функции в программировании
Обобщённые функции в программировании: полиморфизм, параметрический полиморфизм, статическая диспетчеризация, TypeParameters. C++, Java, Smalltalk.
-
Неизменяемые объекты: концепция и применение
Неизменяемые объекты в программировании: что это, преимущества и примеры (строки). Объект, состояние которого нельзя изменить после создания. ООП, функциональное программирование.
-
Проблема "Йо-йо" в программировании
Проблема "йо-йо" в программировании: сложная иерархия классов заставляет разработчика постоянно переключаться между определениями. Антипаттерн ООП.
-
Полиморфизм типов: Подтипирование
Полиморфизм типов: субтипизация в программировании. Отношения подтипов и супертипов, заменяемость типов, безопасность использования в коде.
-
Методы копирования объектов в объектно-ориентированном программировании
Копирование объектов в ООП: глубокое и поверхностное копирование, влияние на производительность и корректность программы. Стратегии копирования состояния объектов.
-
Языки программирования с возможностью расширения во время выполнения
Динамические языки программирования: расширение кода во время выполнения, добавление новых функций и типов. Lisp – пионер в этой области.
-
Точки разреза в аспектно-ориентированном программировании: принципы и ограничения.
Точки разреза (pointcut) в аспектно-ориентированном программировании: определение, применение, синтаксис AspectJ. Разделение логики и модульность.
-
Миксины в объектно-ориентированном программировании
Миксины в ООП: что это, зачем нужны и как решают проблему множественного наследования. Реализация и примеры использования в языках программирования.
-
Фреймворк Foundation в Objective-C: Обзор и Реализации
Foundation Kit: базовая структура Objective-C в OpenStep. Классы для работы с данными, строками (Unicode, UTF-16), управление памятью и объекты NS.
-
Разделение команд и запросов в архитектуре приложений
Разделение команд и запросов (CQS) в IT-архитектуре: принцип проектирования от Бертрана Мейера. Методы – либо действие, либо данные, без побочных эффектов.
-
Принцип подстановки Лисков
Принцип подстановки Лисков (LSP) в ООП: гарантия семантической совместимости типов и наследования. Обеспечивает замену объектов подтипов без поломок программы.
-
Проблема хрупкого базового класса в объектно-ориентированном программировании
Проблема хрупкого базового класса в ООП: риски изменений в базовых классах, влияющих на подклассы. Решения: инкапсуляция, контроль доступа к методам.
-
Боксирование и анбоксирование в программировании
Боксинг в программировании: преобразование примитивных типов в объекты и обратно. Автобоксинг, Java, типы данных, эффективность кода. Объяснение концепции.
-
Объекты IBM i: Типы и особенности
Объекты IBM i: ключевые отличия от файловой системы. Уникальная объектная модель, типы объектов, ограничения и возможности платформы IBM i. i
-
Утиная типизация в объектно-ориентированном программировании
Утиная типизация в ООП: определение объектов по наличию методов, а не по объявленному типу. Гибкость и динамичность в программировании.
-
Оберon 2: Расширения и особенности языка программирования
Oberon 2: расширение языка Oberon с поддержкой рефлексии и ООП. Разработан Niklaus Wirth в 1991 году. Совместим с Oberon, включает виртуальные методы.
-
Поле записи данных: определение и типы
Запись в компьютерных науках: поля, структура данных, реляционные базы данных, объектно-ориентированное программирование. Определение и примеры полей.
-
Модули Perl: структура, использование и документация.
Perl модули: компоненты для языка Perl, определяющие пространства имен и классы. Узнайте о структуре, пакетах и использовании модулей в Perl программировании.
-
Метаклассы: описание и реализация в объектно-ориентированном программировании.
Метаклассы в ООП: что это такое? Определение, поведение классов и их экземпляров. Как метаклассы влияют на создание классов в Python и других языках.
-
Инварианты классов в объектно-ориентированном программировании
Инвариант класса: концепция ООП, обеспечивающая неизменность свойств объектов. Поддерживает целостность состояния, устанавливается при создании и сохраняется.
-
Метаобъекты: манипулирование и самоописание объектов в программировании.
Метаобъекты в информатике: объекты, управляющие другими объектами, их типом и реализацией. Отражение, самомодификация, рефлексия в программировании.
-
Информация о типе во время выполнения (RTTI) в программировании
Информация о типах во время выполнения (RTTI) в C++, Ada, Pascal. Позволяет узнать тип объекта в runtime, безопасно преобразовывать типы и использовать typeid.
-
Делегирование в объектно-ориентированном программировании
Делегирование в ООП: передача ответственности между объектами. Явное и неявное делегирование, переиспользование поведения, языки Self и JavaScript.
-
Система объектных моделей SOM/DSOM: история и перспективы
SOM: объектно-ориентированная библиотека IBM для обмена данными между программами и языками. DSOM на базе CORBA для распределенных систем. Обновление без перекомпиляции!
-
Классное программирование и наследование в ООП
Классное программирование: наследование через классы в ООП. Объекты создаются на основе классов, определяющих их состояние и поведение. Основа популярных языков.
-
Таблица виртуальных методов: механизм динамической диспетчеризации.
Виртуальные таблицы методов (VMT) в программировании: механизм динамической диспетчеризации, используемый в C++, C#, Delphi и других языках. Оптимизация вызова функций во время выполнения.
-
Частичная специализация шаблонов классов в C++
Частичная специализация шаблонов C++: гибкий способ специализировать лишь некоторые аргументы, а не все. Создание классов с нужными данными. 🚀💻
-
Модульное программирование: принципы и история развития
Модульное программирование: техника разделения программы на независимые модули для упрощения разработки и поддержки крупных проектов. Структура и интерфейсы.
-
Конструкторы в объектно-ориентированном программировании
Конструктор в ООП: специальная функция для создания объектов. Инициализирует данные, задает инварианты класса. Отличия от методов и правила использования.
-
Божественный объект в программировании
Божественный объект в программировании: антипаттерн, признаки (много типов, методов). Разделяйте большие задачи на мелкие для чистого кода!
-
Программирование на основе каркасов: принципы и применение.
Программирование-скелет: разработка ПО с использованием простых структур и "заглушек" кода. Топ-даун подход, тестирование на ранних этапах, ускорение разработки.
-
Двойная диспетчеризация в объектно-ориентированном программировании.
Двойная отправка в программировании: механизм вызова функций в зависимости от типов двух объектов. Обзор, примеры и применение в CLOS и Smalltalk.
-
Вариативность в системах типов программирования
Вариативность в языках программирования: как подтипирование сложных типов (списки, функции) связано с подтипированием их компонентов. Объяснение концепции.
-
Методы-мутаторы: управление изменениями переменных в программировании
Методы-мутаторы (сеттеры) в программировании: изменение переменных, инкапсуляция, доступ к данным. Объектно-ориентированное программирование, геттеры.
-
Аспекты и применение советов в программировании.
Советы в программировании: модификация функций без изменения исходного кода. Обходные пути, преимущества и почему их избегают в Lisp.
-
Идентичность объектов в объектно-ориентированном программировании
Идентичность объекта в ООП: уникальность, независимая от свойств. Референсы обеспечивают доступ к объекту по его идентификатору. Ключевые понятия ООП.
-
Инъекция зависимостей в программировании
Инъекция зависимостей: техника программирования для разделения создания и использования объектов. Снижает связанность, повышает гибкость и тестируемость кода.
-
Файлы реализации классов в объектно-ориентированном программировании
Реализация классов в ООП: разделение интерфейса и кода методов (C++, Objective-C). Скрытие реализации для удобства проектирования и использования объектов.
-
Фабрика объектов в объектно-ориентированном программировании
Фабрика в программировании: создание объектов. Паттерн проектирования, абстракция конструктора/прототипа. Гибкое создание объектов разных классов и схем.
-
Объектно-ориентированные и объектно-базированные языки программирования
Объектно-ориентированные языки программирования: определение, отличия от объектно-базированных. Примеры: Simula, C++, Java, Python и другие.
-
Вложенные классы в объектно-ориентированном программировании
Вложенные классы в ООП: что это, как работают и чем отличаются от подклассов. Создание экземпляров внутренних классов требует привязки к внешнему классу.
-
Хрупкость бинарного интерфейса: проблема совместимости объектно-ориентированных библиотек.
Проблема хрупкого бинарного интерфейса (FBI) в ООП: как изменения в библиотеках классов ломают совместимость программ. Причины и история возникновения.
-
Реализация объекта: понятие экземпляра в информатике.
Создание экземпляров (instance) в программировании: что это такое? Объяснение процесса инстанцирования классов и выделения памяти для объектов в ООП.
-
Объектная композиция и агрегация в программировании
Объектный состав и агрегация в программировании: объединение объектов и типов данных. Различия, примеры и связь с ООП и структурами данных.
-
Простые Java-объекты (POJO)
POJO в Java: что это такое? Простое Java-объект без привязки к фреймворкам и ограничениям. Узнайте о POJO, POCO, PORO и других "простых" объектах в программировании.
-
Обзор классов в средах разработки: история и современные возможности.
Класс-браузеры в IDE: история, функции и влияние Smalltalk на современные среды разработки. Обзор структуры ООП кода и навигация по классам.
-
Принцип единого доступа в программировании
Единый доступ в программировании: принцип Бертрана Мейера для объектно-ориентированного кода. Отсутствие синтаксической разницы между атрибутами и методами.
-
Современное проектирование на C++: обобщённое программирование и шаблоны проектирования
Современный дизайн на C++: обобщённое программирование, шаблоны и метапрограммирование от Андрея Александреску. Книга, повлиявшая на C++ разработку.
-
Цепочки исключений: обработка и отладка
Цепочки исключений в программировании: обработка ошибок через "обёртки". Сохранение исходной ошибки для отладки, упрощение обработки на верхних уровнях.
-
Наследование и иерархия классов в объектно-ориентированном программировании
Наследование в ООП: создание новых классов на основе существующих, иерархия классов, повторное использование кода и расширение ПО. C++, интерфейсы, граф наследования.
-
Object orgy
-
Пассивные структуры данных: понятие и реализация в различных языках программирования.
Пассивные структуры данных (PDS) в программировании: определение, применение на границах систем, хранение данных. POD, простые структуры данных.
-
Принцип инверсии зависимостей в объектно-ориентированном проектировании
Принцип инверсии зависимостей в объектно-ориентированном программировании: снижение связанности модулей, абстракции высокого и низкого уровня. ООП, дизайн.
-
Паттерн проектирования "Мультон" в разработке программного обеспечения
Паттерн Multiton в разработке ПО: контролируемое создание нескольких экземпляров класса через карту. Альтернатива Singleton, расширяющая возможности.
-
Типовые классы в информатике и полиморфные типы.
Типовые классы в информатике: поддержка полиморфизма и ограничений для переменных типов. Реализация в Haskell и Standard ML. Принципы и примеры.
-
Верхний тип в логике и информатике
Универсальный тип в логике и программировании (⊤): определение, свойства, отличие от нижнего типа. Полиморфизм в языках Haskell и других системах типов.
-
Абстрактные типы в языках программирования
Абстрактные типы в программировании: определение, отличие от конкретных типов, реализация через абстрактные классы и интерфейсы. Основы объектно-ориентированного программирования.
-
Ключевое слово для ссылки на текущий объект в программировании.
`this`, `self`, `Me` в программировании: ключевые слова для доступа к объекту/классу, в котором выполняется код. Различия в языках и их применение.
-
Патчинг "обезьяной лапкой": динамическое изменение кода во время выполнения
Динамическое изменение кода: что такое monkey patching в программировании? Расширение и модификация кода во время выполнения без изменения исходников. Python, JavaScript и др.
-
Коллекции в Java: Обзор и преимущества использования
Коллекции Java: интерфейсы и классы для работы с данными. Удобная альтернатива массивам, не требующая указания размера при создании.
-
Структурные системы типов: принципы и особенности
Структурная типизация: определение, отличия от номинативной и утиной типизации. Совместимость типов определяется структурой, а не именем. Языки программирования.
-
Curiously recurring template pattern
-
Criticism of Java
-
Friend class
-
Boilerplate code
-
Initialization-on-demand holder idiom