Основы ООП #1
Основные принципы ООП
Четыре принципа ООП
Абстракция
Инкапсуляция
Наследование
Полиморфизм
Разбиение чего-то большого, монолитного на множество маленьких составных частей
Это правильное разделение программы на объекты
Это «сокрытие реализации»
Это специальное отношение между двумя классами
В программировании есть возможность создавать один класс на основе другого. Новый класс становится потомком (наследником) уже существующего. Это очень выгодно, когда есть класс, который содержит 80%-90% нужных нам данных и методов. Мы просто объявляем подходящий класс родителем нашего нового класса, тогда в новом классе автоматически появляются все данные и методы класса-родителя
Оно описывает ситуацию, когда за одним внешним интерфейсом скрываются разные реализации
Полиморфизм позволяет единообразно обращаться к объектам различных классов (обычно имеющих общего предка)
Специфичность языка
Только Java поддерживает многопоточность непосредственно в языке
Объекты и методы поддерживают механизм синхронизации (с ключевым словом synchronized): два синхронизированных метода одного класса не могут выполняться одновременно
Для создания нового потока вы просто наследуете от класса Thread, перегружая метод run()
Ещё одно ключевое свойство Java, конечно, идея переносимого байтового кода
Преимущество инкапсуляции
Валидное внутреннее состояние
В програмах часто возникают ситуации, когда несколько классов, взаимодействуют с одним и тем же объектом. В результате их совместной работы нарушается целостность данных внутри объекта — объект уже не может продолжить нормально работать
Поэтому объект должен следить за изменениями своих внутренних данных, а еще лучше – проводить их сам
Если мы не хотим, чтобы какая-то переменная класса менялась другими классами, мы объявляем ее private, и тогда только методы её же класса смогут получить к ней доступ. Если мы хотим, чтобы значения переменных можно было только читать, но не изменять, тогда нужно добавить public getter для нужных переменных
Правильное использование инкапсуляции гарантирует, что ни один класс не может получить прямой доступ к внутренним данным нашего класса и, следовательно, изменить их без контроля с нашей стороны
Контроль передаваемых аргументов
Иногда нужно контролировать аргументы, передаваемые в методы нашего класса. Например, наш класс описывает объект «человек» и позволяет задать дату его рождения. Мы должны проверять все передаваемые данные на их соответствие логике программы и логике нашего класса. Например, не допускать 13-й месяц, дату рождения 30 февраля и так далее
Способы взаимодействия объекта со сторонними объектами
Инкапсуляция позволяет добавлять дополнительные ограничения, которые можно превратить в дополнительные преимущества
Наследовать и переопределять можно только нестатические методы. Статические методы не наследуются и, следовательно, не переопределяются