2013 09 30_lecture_04
description
Transcript of 2013 09 30_lecture_04
![Page 1: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/1.jpg)
Классы, объекты и пакеты в Java
Алексей Владыкин
30 сентября 2013
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 1 / 35
![Page 2: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/2.jpg)
1 Основы ООП
2 Классы
3 Наследование
4 Пакеты
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 2 / 35
![Page 3: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/3.jpg)
Основы ООП
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 3 / 35
![Page 4: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/4.jpg)
Основы ООП
Определение ООП
Объект — это мыслимая или реальная сущность, обладающаяхарактерным поведением и отличительными характеристиками иявляющаяся важной в предметной области
Гради Буч
Объектно-ориентированное программирование — парадигмапрограммирования, в которой программа строится извзаимодействующих объектов
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 4 / 35
![Page 5: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/5.jpg)
Основы ООП
Свойства объекта
Объект является экземпляром класса
Объект имеет внутреннее состояние
Объект может принимать сообщения(в большинстве языков сообщение = вызов метода)
Объект — это «умные данные»
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 5 / 35
![Page 6: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/6.jpg)
Основы ООП
Возможности ООП
ИнкапсуляцияСокрытие деталей реализации за внешним интерфейсом
НаследованиеСоздание производных классов, наследующих свойства базового
ПолиморфизмРазная обработка сообщений в разных классах
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 6 / 35
![Page 7: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/7.jpg)
Основы ООП
ООП в Java
Поддержка ООП заложена в Java изначально(инкапсуляция, наследование, полиморфизм)
В Java все является объектом, кроме примитивных типов
Исполняемый код может находиться только в классе
Стандартная библиотека предоставляет огромное количествоклассов, но можно свободно создавать свои
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 7 / 35
![Page 8: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/8.jpg)
Классы
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 8 / 35
![Page 9: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/9.jpg)
Классы
Объявление класса
/* modifiers */ class Example {
/* class content: fields and methods */
}
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 9 / 35
![Page 10: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/10.jpg)
Классы
Модификаторы доступа
publicдоступ для всех
protectedдоступ в пределах пакета и дочерних классов
privateдоступ в пределах класса
по умолчанию (нет ключевого слова)доступ в пределах пакета
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 10 / 35
![Page 11: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/11.jpg)
Классы
Вложенные классы
Можно объявить класс внутри другого класса
Такие классы имеют доступ к private-членам друг друга
Экземпляр вложенного класса связан с экземпляром внешнегокласса
Если связь не нужна, вложенный класс объявляют смодификатором static
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 11 / 35
![Page 12: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/12.jpg)
Классы
Поля
class Example {
/* modifiers */ int number;/* modifiers */ String text = "hello";
}
Поля инициализируются значениями по умолчаниюМодификатор final — значение должно быть присвоено ровноодин раз к моменту завершения инициализации экземпляра
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 12 / 35
![Page 13: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/13.jpg)
Классы
Методы
class Example {
private int number;
/* modifiers */ int getNumber () {return number;
}
}
Возможна перегрузка методов(несколько одноименных методов с разными параметрами)
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 13 / 35
![Page 14: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/14.jpg)
Классы
Конструкторы
class Example {
private int number;
/* modifiers */ Example(int number) {this.number = number;
}
}
Если не объявлен ни один конструктор, автоматически создаетсяконструктор по умолчанию (без параметров)
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 14 / 35
![Page 15: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/15.jpg)
Классы
Деструктор
В Java нет деструкторов, сбор мусора автоматический
Есть метод void finalize(), но пользоваться им нерекомендуется
При необходимости освободить ресурсы заводят обычный методvoid close() или void dispose()
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 15 / 35
![Page 16: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/16.jpg)
Классы
Принцип «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
![Page 17: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/17.jpg)
Классы
Статические поля и методы
class Example {
/* modifiers */ static finalint DEFAULT_NUMBER = 333;
/* modifiers */ static int getDefaultNumber () {return DEFAULT_NUMBER;
}
}
Статические поля и методы относятся не к экземпляру класса, ако всему классу
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 17 / 35
![Page 18: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/18.jpg)
Классы
Доступ к статическим членам
int defaultNumber = Example.DEFAULT_NUMBER;// defaultNumber -> 333
defaultNumber = Example.getDefaultNumber ();// defaultNumber -> 333
Example e = new Example (3);// possible , but discourageddefaultNumber = e.getDefaultNumber ();// defaultNumber -> 333
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 18 / 35
![Page 19: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/19.jpg)
Классы
Интерфейсы
Интерфейс определяет возможные сообщения,но не их реализацию
interface Interface1 {int getNumber ();
}
Класс может реализовывать несколько интерфейсов
class Example implements Interface1 , Interface2 {int getNumber () {
// implementation}// other methods
}
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 19 / 35
![Page 20: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/20.jpg)
Классы
Перечисления
Класс с фиксированным количеством экземпляровМожет иметь поля и методы
enum Direction {LEFT ,RIGHT ,UP,DOWN
}
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 20 / 35
![Page 21: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/21.jpg)
Наследование
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 21 / 35
![Page 22: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/22.jpg)
Наследование
Объявление класса-наследника
class Derived extends Example {
/* derived class content */
}
Java не поддерживает множественное наследование,но есть интерфейсыВсе классы наследуют java.lang.Object
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 22 / 35
![Page 23: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/23.jpg)
Наследование
Конструктор класса-наследника
class Derived extends Example {
Derived () {this (10);
}
Derived(int number) {super(number );
}
}
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 23 / 35
![Page 24: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/24.jpg)
Наследование
Переопределение методов
class Derived extends Example {
@Overrideint getNumber () {
int number = super.getNumber ();return Math.max(10, number );
}
}
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 24 / 35
![Page 25: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/25.jpg)
Наследование
Полиморфизм в действии
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
![Page 26: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/26.jpg)
Наследование
Liskov Substitution Principle
Если S является подтипом T , тогда объекты типа T в программемогут быть замещены объектами типа S без каких-либоизменений желательных свойств этой программы
Поведение наследуемых классов не должно противоречитьповедению, заданному базовым классом, то есть поведениенаследуемых классов должно быть ожидаемым для кода,использующего переменную базового типа.
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 26 / 35
![Page 27: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/27.jpg)
Наследование
Оператор 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
![Page 28: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/28.jpg)
Наследование
Модификатор final
final class Example {...}нельзя создать класс-наследник
final int getNumber() {...}нельзя переопределить метод в дочернем классе
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 28 / 35
![Page 29: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/29.jpg)
Наследование
Модификатор abstract
abstract class Example {...}нельзя создать экземпляр класса
abstract int getNumber();метод без реализации (класс должен быть абстрактным)
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 29 / 35
![Page 30: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/30.jpg)
Пакеты
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 30 / 35
![Page 31: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/31.jpg)
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35
![Page 32: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/32.jpg)
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35
![Page 33: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/33.jpg)
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35
![Page 34: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/34.jpg)
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2013;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2013/
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35
![Page 35: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/35.jpg)
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2013;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2013/
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35
![Page 36: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/36.jpg)
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2013;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2013/
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35
![Page 37: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/37.jpg)
Пакеты
Импорт
Импорт одного класса: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
![Page 38: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/38.jpg)
Пакеты
Импорт
Импорт одного класса: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
![Page 39: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/39.jpg)
Пакеты
Импорт
Импорт одного класса: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
![Page 40: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/40.jpg)
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35
![Page 41: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/41.jpg)
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35
![Page 42: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/42.jpg)
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35
![Page 43: 2013 09 30_lecture_04](https://reader034.fdocuments.net/reader034/viewer/2022051610/5486cc6fb47959f10c8b52f8/html5/thumbnails/43.jpg)
Что сегодня узнали
Что такое ООП
Как в Java объявить класс, создать его экземплярыи работать с ними
Как в Java реализуется инкапсуляция, наследованиеи полиморфизм
Что такое пакеты и как с ними работать
Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 35 / 35