Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Лекция 6_принципы ООП : инкапсуляция, наследование

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité

Consultez-les par la suite

1 sur 21 Publicité

Plus De Contenu Connexe

Similaire à Лекция 6_принципы ООП : инкапсуляция, наследование (20)

Publicité

Plus récents (20)

Publicité

Лекция 6_принципы ООП : инкапсуляция, наследование

  1. 1. www.spro-club.ru
  2. 2. План  Инкапсуляция  интерфейс объекта  правила доступа к данным класса  Элементы классов и элементы объектов  Наследование  отношения специализации и обобщения  ссылка super  модификатор protected
  3. 3. Инкапсуляция  Инкапсуляция (И) (encapsulation) – «заключение в капсулу» - ограничение доступа к содержимому «капсулы» извне и отсутствие такого ограничения внутри «капсулы»  И – один из основных принципов ООП  И - свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента (то, что у него внутри),  а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные
  4. 4. Интерфейс объекта  При соблюдении принципа инкапсуляции (И) пользователю предоставляется только спецификация (интерфейс) объекта  Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью ключевого слова: public  Пользователь не может использовать закрытые данные и методы. Реализуется с помощью ключевых слов: private, protected
  5. 5. Правила доступа к данным класса  Согласно принципу Инкапсуляции не рекомендуется давать доступ к данным (переменным) класса напрямую извне  Пример открытых данных:  public Rect {  public int x1, x2;  }  Rect r = new Rect();  r.x1 = 10;
  6. 6. Правила доступа к данным класса  Рекомендуется закрывать все данные от прямого доступа извне (с помощью модификатора private)  Доступ к данным должен осуществляться через специальные методы доступа (access methods) – «геттеры» (методы получения данных, Get) и «сеттеры» (методы установки данных, Set)  Метод-получатель (геттер) должен возвращать значение того же типа, что и само поле и не имеет параметров  Метод-присваиватель (сеттер) имеет тип void и принимает один параметр того же типа, что и само поле  Примечание: NetBeans умеет автоматически создавать методы доступа. Для этого в окне редактора кода в контекстном меню выберите пункт «Реорганизация кода» (Refactoring) и подпункт «Инкапсулировать поля»
  7. 7. Пример методов доступа  Пример:  public Rect {  private int x1, x2;  public int getX1() {  return x1;  }  public void setX1(int x1) {  this.x1 = x1;  }  }  Rect r = new Rect();  r.setX1(10);
  8. 8. Применение инкапсуляции (И)  И позволяет контролировать процессы изменения и считывания данных  В методы доступа можно встроить условия проверки  в присваивателе можно проверять переданное значение на попадание в область допустимых значений  в получателе можно проверять, к примеру, права доступа к этим данным или вычислять значения и т.п.
  9. 9. Элементы класса и элементы объекта  Методы объектов пользуются (имеют доступ) полями данных (атрибутами) объектов  Атрибуты объекта – это обычные свойства  Вызвать метод объекта можно только с помощью объектной переменной. Без создания объекта это сделать нельзя  Методы класса могут пользоваться только атрибутами класса  Чтобы создать атрибуты и методы класса, достаточно поставить модификатор static перед этими элементами  Обратиться к элементам класса можно через имя класса, а не только через объект. Т.е. для этого создавать объект не нужно!  Но! Элементы класса («статические») не могут получать доступ к элементам объекта
  10. 10. Пример элементов класса  Многие стандартные классы из библиотеки Java имеют методы и атрибуты класса («статические»)  Например, в классе Math много таких элементов  Можно пользоваться ими, не создавая объект типа Math:  double x = Math.sqrt(9);  double y = Math.PI;  С помощью переменных класса удобно создавать константы. Например:  public class Consts {  public static final double PI = 3.14;  public static double len(double r) { return 2*PI*r; }  }  System.out.print(“Число ПИ = “ + Consts.PI);  System.out.print(“Длина окружности = “ + Consts.len(4));
  11. 11. Специализация и обобщение  Отношение специализации в русском языке выражается словом «является»  Специализация – это уточнение  Один объект является частным случаем другого (один объект специализирует другой)  Специализация – конкретизация или уточнение  Пример: Сотрудник ОА является сотрудником предприятия, программист является сотрудником ОА и т.д.  Обобщение – вид отношений, обратный специализации  Обобщение – переход на более абстрактный уровень  Например, «любой программист является человеком»
  12. 12. Наследование  Механизм построения иерархии классов  Иерархия – отношение «предок»->«потомок» (родительский-дочерний классы, суперкласс- подкласс, порождающий-порождённый классы)  Каждый порожденный класс иерархии имеет доступ к коду и данным всех порождающих классов (к элементом, разрешённым установленной областью видимости)  Наследование – мощный механизм повторного использования программного кода
  13. 13. Наследование в Java  Для того, чтобы указать, что один класс является потомком (производным) от другого класса, необходимо после его имени поставить ключевое слово extends и имя родительского класса:  public class дочерний_класс extends родительский_класс  {  }  Модификатор доступа protected позволяет открыть члены класса всем потомкам этого класса, для остальных они остаются недоступными
  14. 14. Ссылка super  В чём-то похожа на this  Ссылается на родительский класс  Можно применять двумя способами:  получать доступ к открытым (public) и защищённым (protected) элементам родительского класса  например, super.x1 = 10;  вызывать конструктор родительского класса. Вызов конструктора родит.элемента super должен быть первым выражением в конструкторе дочернего элемента:  public Square(Graphics g) { super(g); }
  15. 15. Модификатор protected  Делает элементы невидимыми извне класса  Эти элементы могут быть доступны в дочерних классах  в отличие от элементов с private-доступом, кот. в дочерних классах не видны
  16. 16. Пример: иерархия геометрических фигур  Среди геом.фигур можно выделить отношения обобщения-специализации  Например, квадрат является ромбом с прямыми углами  Квадрат является прямоугольником с одинаковыми сторонами  Круг является эллипсом с одинаковыми радиусами
  17. 17. Пакеты в Java  Пакет (package) – это способ группировки классов по функциональному назначению  Пакеты Java обеспечивают уникальные пространства имен  Пакеты могут образовывать иерархическую древовидную структуру  Пакет верхнего уровня проекта должен иметь уникальное имя, не совпадающее с именами других глобальных пакетов проекта  Пакеты нижнего уровня обычно связаны с функциональным назначением классов, находящихся в данном пакете  Пакет, который содержит группу классов, объединяет их по некоторому смыслу
  18. 18. Пакеты в Java (продолжение)  В пакет объединяются классы, сходные по функциональному назначению  Реализуют принцип модульности  Полное имя класса включает имена пакета и всех подпакетов, в котором он описан Project_DIR | |-- classes | `-- zoostore Структура директорий, в которых | |-- model хранятся файлы классов, должна | | `-- Cat.class соответствовать структуре | | | `-- test пакетов. | `-- TestCats.class | При этом желательно файлы `-- src `-- zoostore исходных кодов и файлы классов |-- model размещать отдельно, что | `-- Cat.java повышает управляемость | `-- test
  19. 19. Описание пакета  Указать имя пакета, в котором находится класс, можно с помощью директивы package  package carspack;  Она должна быть самой первой командой в файле  До неё могут находиться только комментарии и пустые строки  Если директива package не указана в файле, то классы из него всё равно помещаются в пакет по умолчанию с именем default  Примечание: имена пакетов принято указывать в нижнем регистре
  20. 20. Директива import  Позволяет включать один класс или все классы пакета в текущий файл  Это позволяет использовать короткие имена классов  Пример:  import java.util.Random; // подключение класса  import java.awt.*; // подключение всех классов пакета
  21. 21. Задание  Просмотреть 2 презентации  Изучить пример  Реализовать методы класса Ellipse для вычисления площади и длины  Создать класс Circle – круг – путём наследования от класса Ellipse (на примере иерархии Rectangle- >Square)

×