- Абстракция. Моделирование требуемых атрибутов и взаимодействий сущностей в виде классов для определения абстрактного представления системы.
- Инкапсуляция. Скрытие внутреннего состояния и функций объекта и предоставление доступа только через открытый набор функций.
- Наследование. Возможность создания новых абстракций на основе существующих.
- Полиморфизм. Возможность реализации наследуемых свойств или методов отличающимися способами в рамках множества абстракций.
- Single Responsibility Principle. Принцип единственной ответственности. Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче.
- Open-Closed Principle. Принцип открытости/закрытости. «программные сущности … должны быть открыты для расширения, но закрыты для модификации».
- Liskov Substitution Principle. Принцип подстановки Лисков. «функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа не зная об этом»
- Interface Segregation Principle. Принцип разделения интерфейса. «много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения»
- Dependency Inversion Principle. Принцип инверсии зависимостей. «Зависимость на Абстракциях. Нет зависимости на что-то конкретное»
- Все названия в формате CamelCase. Классы - с большой буквы, методы, поля и переменные - с маленькой.
- Именя должны передавать намерения. Плохое название - d, dsc; хорошее - daysSinceCreation.
- Методы должны быть компактными (< 20 строк) и выполнять только одну операцию. Как можно меньше параметров (возможно стоит объединить в отдельный класс).