2013 09 30_lecture_04
Upcoming SlideShare
Loading in...5
×
 

2013 09 30_lecture_04

on

  • 2,837 views

 

Statistics

Views

Total Views
2,837
Views on SlideShare
362
Embed Views
2,475

Actions

Likes
0
Downloads
14
Comments
0

3 Embeds 2,475

http://beta.compscicenter.ru 2440
http://compscicenter.ru 34
http://gamma.compscicenter.ru 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

2013 09 30_lecture_04 2013 09 30_lecture_04 Presentation Transcript

  • Классы, объекты и пакеты в Java Алексей Владыкин 30 сентября 2013 Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 1 / 35
  • 1 Основы ООП 2 Классы 3 Наследование 4 Пакеты Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 2 / 35
  • Основы ООП Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 3 / 35
  • Основы ООП Определение ООП Объект — это мыслимая или реальная сущность, обладающая характерным поведением и отличительными характеристиками и являющаяся важной в предметной области Гради Буч Объектно-ориентированное программирование — парадигма программирования, в которой программа строится из взаимодействующих объектов Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 4 / 35
  • Основы ООП Свойства объекта Объект является экземпляром класса Объект имеет внутреннее состояние Объект может принимать сообщения (в большинстве языков сообщение = вызов метода) Объект — это «умные данные» Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 5 / 35
  • Основы ООП Возможности ООП Инкапсуляция Сокрытие деталей реализации за внешним интерфейсом Наследование Создание производных классов, наследующих свойства базового Полиморфизм Разная обработка сообщений в разных классах Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 6 / 35
  • Основы ООП ООП в Java Поддержка ООП заложена в Java изначально (инкапсуляция, наследование, полиморфизм) В Java все является объектом, кроме примитивных типов Исполняемый код может находиться только в классе Стандартная библиотека предоставляет огромное количество классов, но можно свободно создавать свои Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 7 / 35
  • Классы Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 8 / 35
  • Классы Объявление класса /* modifiers */ class Example { /* class content: fields and methods */ } Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 9 / 35
  • Классы Модификаторы доступа public доступ для всех protected доступ в пределах пакета и дочерних классов private доступ в пределах класса по умолчанию (нет ключевого слова) доступ в пределах пакета Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 10 / 35
  • Классы Вложенные классы Можно объявить класс внутри другого класса Такие классы имеют доступ к private-членам друг друга Экземпляр вложенного класса связан с экземпляром внешнего класса Если связь не нужна, вложенный класс объявляют с модификатором static Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 11 / 35
  • Классы Поля class Example { /* modifiers */ int number; /* modifiers */ String text = "hello"; } Поля инициализируются значениями по умолчанию Модификатор final — значение должно быть присвоено ровно один раз к моменту завершения инициализации экземпляра Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 12 / 35
  • Классы Методы class Example { private int number; /* modifiers */ int getNumber () { return number; } } Возможна перегрузка методов (несколько одноименных методов с разными параметрами) Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 13 / 35
  • Классы Конструкторы class Example { private int number; /* modifiers */ Example(int number) { this.number = number; } } Если не объявлен ни один конструктор, автоматически создается конструктор по умолчанию (без параметров) Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 14 / 35
  • Классы Деструктор В Java нет деструкторов, сбор мусора автоматический Есть метод void finalize(), но пользоваться им не рекомендуется При необходимости освободить ресурсы заводят обычный метод void close() или void dispose() Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 15 / 35
  • Классы Принцип «Tell, Don’t Ask» Procedural code gets information then makes decisions. Object-oriented code tells objects to do things. Alec Sharp Правильно: говорить объектам, что вам от них нужно Неправильно: спрашивать у объекта его состояние и объяснять ему, что с ним делать дальше Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 16 / 35
  • Классы Статические поля и методы class Example { /* modifiers */ static final int DEFAULT_NUMBER = 333; /* modifiers */ static int getDefaultNumber () { return DEFAULT_NUMBER; } } Статические поля и методы относятся не к экземпляру класса, а ко всему классу Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 17 / 35
  • Классы Доступ к статическим членам int defaultNumber = Example.DEFAULT_NUMBER; // defaultNumber -> 333 defaultNumber = Example.getDefaultNumber (); // defaultNumber -> 333 Example e = new Example (3); // possible , but discouraged defaultNumber = e.getDefaultNumber (); // defaultNumber -> 333 Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 18 / 35
  • Классы Интерфейсы Интерфейс определяет возможные сообщения, но не их реализацию interface Interface1 { int getNumber (); } Класс может реализовывать несколько интерфейсов class Example implements Interface1 , Interface2 { int getNumber () { // implementation } // other methods } Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 19 / 35
  • Классы Перечисления Класс с фиксированным количеством экземпляров Может иметь поля и методы enum Direction { LEFT , RIGHT , UP , DOWN } Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 20 / 35
  • Наследование Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 21 / 35
  • Наследование Объявление класса-наследника class Derived extends Example { /* derived class content */ } Java не поддерживает множественное наследование, но есть интерфейсы Все классы наследуют java.lang.Object Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 22 / 35
  • Наследование Конструктор класса-наследника class Derived extends Example { Derived () { this (10); } Derived(int number) { super(number ); } } Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 23 / 35
  • Наследование Переопределение методов class Derived extends Example { @Override int getNumber () { int number = super.getNumber (); return Math.max(10, number ); } } Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 24 / 35
  • Наследование Полиморфизм в действии Example e = new Example (3); // e.getNumber () -> 3 e = new Derived (3); // e.getNumber () -> 10 Derived d = (Derived) e; // d.getNumber () -> 10 Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 25 / 35
  • Наследование Liskov Substitution Principle Если S является подтипом T, тогда объекты типа T в программе могут быть замещены объектами типа S без каких-либо изменений желательных свойств этой программы Поведение наследуемых классов не должно противоречить поведению, заданному базовым классом, то есть поведение наследуемых классов должно быть ожидаемым для кода, использующего переменную базового типа. Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 26 / 35
  • Наследование Оператор instanceof Позволяет проверить тип объекта в момент исполнения программы Example e = new Example (3); // e instanceof Object -> true // e instanceof Example -> true // e instanceof Derived -> false e = new Derived (3); // e instanceof Object -> true // e instanceof Example -> true // e instanceof Derived -> true Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 27 / 35
  • Наследование Модификатор final final class Example {...} нельзя создать класс-наследник final int getNumber() {...} нельзя переопределить метод в дочернем классе Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 28 / 35
  • Наследование Модификатор abstract abstract class Example {...} нельзя создать экземпляр класса abstract int getNumber(); метод без реализации (класс должен быть абстрактным) Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 29 / 35
  • Пакеты Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 30 / 35
  • Пакеты Зачем нужны пакеты Задание пространства имен, предотвращение коллизий имен классов Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35
  • Пакеты Зачем нужны пакеты Задание пространства имен, предотвращение коллизий имен классов Логическая группировка связанных классов Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35
  • Пакеты Зачем нужны пакеты Задание пространства имен, предотвращение коллизий имен классов Логическая группировка связанных классов Сокрытие деталей реализации за счет модификаторов доступа Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35
  • Пакеты Как работают пакеты Задание пакета для класса: package ru.compscicenter.java2013; Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35
  • Пакеты Как работают пакеты Задание пакета для класса: package ru.compscicenter.java2013; Использование класса из пакета: классы текущего пакета и пакета java.lang всегда видны классы других пакетов доступны по полному имени с пакетом можно использовать директиву import Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35
  • Пакеты Как работают пакеты Задание пакета для класса: package ru.compscicenter.java2013; Использование класса из пакета: классы текущего пакета и пакета java.lang всегда видны классы других пакетов доступны по полному имени с пакетом можно использовать директиву import Класс, принадлежащий пакету, должен лежать в одноименной директории: ru/compscicenter/java2013/ Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35
  • Пакеты Импорт Импорт одного класса: import ru.compscicenter.java2013.ExampleClass; Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 33 / 35
  • Пакеты Импорт Импорт одного класса: import ru.compscicenter.java2013.ExampleClass; Импорт всех классов пакета: import ru.compscicenter.java2013.*; Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 33 / 35
  • Пакеты Импорт Импорт одного класса: import ru.compscicenter.java2013.ExampleClass; Импорт всех классов пакета: import ru.compscicenter.java2013.*; Импорт статических полей и методов: import static java.lang.System.out; import static java.util.Arrays.*; Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 33 / 35
  • Пакеты Как работает импорт Директивы import позволяют компилятору получить полные имена всех используемых классов, полей и методов по их коротким именам Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35
  • Пакеты Как работает импорт Директивы import позволяют компилятору получить полные имена всех используемых классов, полей и методов по их коротким именам В class-файл попадают полные имена, подстановка содержимого не происходит Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35
  • Пакеты Как работает импорт Директивы import позволяют компилятору получить полные имена всех используемых классов, полей и методов по их коротким именам В class-файл попадают полные имена, подстановка содержимого не происходит При запуске программы все используемые классы должны присутствовать в classpath Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35
  • Что сегодня узнали Что такое ООП Как в Java объявить класс, создать его экземпляры и работать с ними Как в Java реализуется инкапсуляция, наследование и полиморфизм Что такое пакеты и как с ними работать Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 35 / 35