ооп. ООП. Инкапсуляция скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры). Как применяется инкапсуляция
Скачать 83.12 Kb.
|
ООП Объектно-ориентированное программирование (ООП) — парадигма программирования, сменившая процедурное программирование (последовательное, алгоритмичное), в которой основными концепциями являются понятия объектов и классов. Инкапсуляция Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое. В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных. Инкапсуляция - скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры). Как применяется инкапсуляция Есть несколько способов регулировать доступ к нашим данным. Основные это: Модификаторы доступа (Access modifiers) Геттеры и Сеттеры (Getters and Setters) Модификаторы доступа Модификаторы доступа - это специальные слова, которые показывают, кому нельзя, а кому можно пользоваться данными. Существуют четыре модификатора доступа: На самом деле по названиям не сложно понять, что каждый из них означает: public - "публичный, доступный всем" default - "по умолчанию". Когда мы не пишем модификатора доступа (как мы это делали в наших предыдущих уроках), он по умолчанию имеет значение default. Данные с этим модификатором видны в пределах package. protected - "защищенный". На самом деле это то же самое, что и default, только доступ имеют еще и классы-наследники. private - "частный, личный". Такие данные видны только самому классу. Гетеры и Сеттеры Создавая новый класс, Вы должны думать не только о функциональности, но и о безопасности - кто и при каких условиях может получать доступ к внутренностям Вашего класса. Полиморфизм Полиморфизм - это возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных отношением наследования. Как проявляется полиморфизмДело в том, что если бы в Java не было принципа полиморфизма, компилятор бы интерпретировал это как ошибку: Как видите, методы на картинке отличаются значениями, которые они принимают: первый принимает int а второй принимает String Однако, поскольку в Java используется принцип полиморфизма, компилятор не будет воспринимать это как ошибку, потому что такие методы будут считаться разными: Называть методы одинаково - это очень удобно. Например, если у нас есть метод, который ищет корень квадратный из числа, гораздо легче запомнить одно название (например, sqrt()), чем по одному отдельному названию на этот же метод, написанный для каждого типа: Как видите, мы не должны придумывать отдельное название для каждого метода - а главное их запоминать! Очень удобно. Теперь Вы можете понять, почему часто этот принцип описывают фразой: Один интерфейс - много методов Это предполагает, что мы можем заполнить одно название (один интерфейс), по которому мы сможем обращаться к нескольким методам. Перегрузка методовТо, что мы показывали выше - несколько методов с одним названием и разными параметрами - называется перегрузкой. Но это был пример перегрузки метода в одном классе. Но бывает еще один случай - переопределение методов родительского класса. Переопределение методов родителяКогда мы наследуем какой-либо класс, мы наследуем и все его методы. Но если нам хочется изменить какой-либо из методов, который мы наследуем, мы можем всего-навсего переопределить его. Мы не обязаны, например, создавать отдельный метод с похожим названием для наших нужд, а унаследованный метод будет "мертвым грузом" лежать в нашем классе. Именно то, что мы можем создать в классе-наследнике класс с таким же названием, как и класс, который мы унаследовали от родителя, и называется переопределением. Пример Представим, что у нас есть такая структура: Вверху иерархии классов стоит класс Animal. Его наследуют три класса - Cat, Dog и Cow. У класса "Animal" есть метод "голос" (voice). Этот метод выводит на экран сообщение "Голос". Естественно, ни собака, ни кошка не говорят "Голос" Они гавкают и мяукают. Соответственно, Вам нужно задать другой метод для классов Cat, Dog и Cow - чтобы кошка мяукала, собака гавкала, а корова говорила "Муу". Поэтому, в классах-наследниках мы переопределяем метод voice(), чтобы мы в консоли получали "Мяу", "Гав" и "Муу". Обратите внимание: перед методом, который мы переопределяем, пишем "@Override". Это дает понять компилятору, что мы хотим переопределить метод. Так что же такое полиморфизмТем не менее, полиморфизм - это принцип. Все реальные примеры, которые мы приведодили выше - это только способы реализации полиморфизма. Давайте снова посмотрим на определение, которое мы давали в начале статьи: Полиморфизм - возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных отношением наследования. Выглядит понятнее, правда? Мы показали, как можно: создавать "одноименные методы" в одном классе ("перегрузка методов") или изменить поведение методов родительского класса ("переопределение методов"). Все это - проявления "повышенной гибкости" объектно-ориентированных языков благодаря полиморфизму. Наследование - выделение общих свойств и методов в родительский класс. extends - расширение родительского класса. Инкапсуляция - скрытие своих и внутренних методов в классе и предоставление к ним доступа через публичные (доступные другим классам) методы (геттеры, сеттеры). Полиморфизм - это способность метода принимать в качестве аргумента и обрабатывать разные типы информации. (?) иногда выделяют еще Абстракцию - при подходе к задаче отойти от частности (желтый автомобиль пикап с двигателем 3.0) и перейти к более обширному понятию (сущность - автомобиль) - Абстракции. Класс — это шаблонная конструкция, которая позволяет описать в программе объект, его свойства (атрибуты или поля класса) и поведение (методы класса). Каждый класс имеет своё имя, чтобы в будущем к нему можно было обратиться.Объект - конкретный экземпляр класса, который имеет свои собственные конкретные значения свойств. Свойства класса - поле данных класса (переменные, массивы и т.п) Метод класса - функция, которая описывает то, как сущность выполняет определенные действия. Перегрузка методов: - Все методы в Java могут быть перегружены (кроме final) - Перегруженный в дочернем классе метод, будет вызван для объекта данного класса, вместо метода родительского класса. - Если метод не был перегружен, то будет вызвана реализация родительского класса. @Override — проверяет, переопределен ли метод. Вызывает ошибку компиляции / интерпретации, если метод не найден в родительском классе или интерфейсе; NEW - это оператор, который создает новые объекты класса. Он: выделяет память под объект создает объект (вызывает конструктор) возвращает ссылку на созданный объект Конструктор - специальный метод для инициализации объекта во время его создания с помощью оператора new. Если его не описывать отдельно - у класса будет конструктор по умолчанию. От метода отличается тем, что у него нет возвращаемого типа и он называется так же как и класс. Пакет состоит из 3 составляющих - тип домена (com, edu, ru), имя компании, или фамилия и третья - имя проекта. Для того, чтобы классы не пересекались (конвенция). Пакеты используются для того, чтобы логически группировать различные классы. Модификаторы доступа:public - доступно всем protected - доступно только внутри пакета и наследникам default - доступно только в пакете класса private - доступно только внутри класса ключевое слово super - обращение к родительскому классу. |