2012 10 03_java_lecture04

55
Классы, объекты и пакеты в Java Алексей Владыкин 3 октября 2012 Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 1 / 42

description

 

Transcript of 2012 10 03_java_lecture04

Page 1: 2012 10 03_java_lecture04

Классы, объекты и пакеты в Java

Алексей Владыкин

3 октября 2012

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 1 / 42

Page 2: 2012 10 03_java_lecture04

1 Основы ООП

2 Объявление класса

3 Использование класса

4 Наследование

5 Пакеты

6 Модификаторы доступа

7 Вложенные классы

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 2 / 42

Page 3: 2012 10 03_java_lecture04

Основы ООП

1 Основы ООП

2 Объявление класса

3 Использование класса

4 Наследование

5 Пакеты

6 Модификаторы доступа

7 Вложенные классы

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 3 / 42

Page 4: 2012 10 03_java_lecture04

Основы ООП

Определение ООП

Объектно-ориентированное программирование — парадигмапрограммирования, в которой программа строится извзаимодействующих объектов

Объект — это мыслимая или реальная сущность, обладающаяхарактерным поведением и отличительными характеристиками иявляющаяся важной в предметной области // Гради Буч

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 4 / 42

Page 5: 2012 10 03_java_lecture04

Основы ООП

Альтернативы ООП

Структурное программирование

Функциональное программирование

Логическое программирование

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 5 / 42

Page 6: 2012 10 03_java_lecture04

Основы ООП

Свойства объекта

Объект является экземпляром класса

Объект имеет внутреннее состояние

Объект может принимать сообщения(в большинстве языков сообщение = вызов метода)

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 6 / 42

Page 7: 2012 10 03_java_lecture04

Основы ООП

Возможности ООП

ИнкапсуляцияСокрытие деталей реализации за набором допустимых сообщений

НаследованиеСоздание производных классов, наследующих свойства базового

ПолиморфизмРазная обработка сообщений в разных классах

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 7 / 42

Page 8: 2012 10 03_java_lecture04

Основы ООП

ООП в Java

Поддержка ООП заложена в Java изначально(инкапсуляция, наследование, полиморфизм)

В Java все является объектом, кроме примитивных типов

Исполняемый код может находиться только в классе

Стандартная библиотека предоставляет огромное количествоклассов, но можно свободно создавать свои

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 8 / 42

Page 9: 2012 10 03_java_lecture04

Объявление класса

1 Основы ООП

2 Объявление класса

3 Использование класса

4 Наследование

5 Пакеты

6 Модификаторы доступа

7 Вложенные классы

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 9 / 42

Page 10: 2012 10 03_java_lecture04

Объявление класса

/* modifiers */ class Example {

/* class content: fields and methods */

}

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 10 / 42

Page 11: 2012 10 03_java_lecture04

Объявление класса

Поля

class Example {

/* modifiers */ int number;/* modifiers */ String text = "hello";

}

Поля инициализируются значениями по умолчаниюМодификатор final — значение должно быть присвоено ровноодин раз к моменту завершения инициализации экземпляра

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 11 / 42

Page 12: 2012 10 03_java_lecture04

Объявление класса

Методы

class Example {

int number;

/* modifiers */ int getNumber () {return number;

}

}

Возможна перегрузка методов(несколько одноименных методов с разными параметрами)

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 12 / 42

Page 13: 2012 10 03_java_lecture04

Объявление класса

Конструкторы

class Example {

int number;

/* modifiers */ Example(int number) {this.number = number;

}

}

Если не объявлен ни один конструктор, автоматически создаетсяконструктор по умолчанию (без параметров)

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 13 / 42

Page 14: 2012 10 03_java_lecture04

Объявление класса

Деструктор

В Java нет деструкторов, сбор мусора автоматический

Есть метод void finalize(), но пользоваться им нерекомендуется

При необходимости освободить ресурсы заводят обычный методvoid close() или void dispose()

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 14 / 42

Page 15: 2012 10 03_java_lecture04

Объявление класса

Статические поля и методы

class Example {

/* modifiers */ static finalint DEFAULT_NUMBER = 333;

/* modifiers */ static int getDefaultNumber () {return DEFAULT_NUMBER;

}

}

Статические поля и методы относятся не к экземпляру класса, ако всему классу

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 15 / 42

Page 16: 2012 10 03_java_lecture04

Использование класса

1 Основы ООП

2 Объявление класса

3 Использование класса

4 Наследование

5 Пакеты

6 Модификаторы доступа

7 Вложенные классы

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 16 / 42

Page 17: 2012 10 03_java_lecture04

Использование класса

Класс Example можно использовать как

Параметр метода

Возвращаемое значение метода

Локальная переменная

Поле класса(того же или любого другого)

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 17 / 42

Page 18: 2012 10 03_java_lecture04

Использование класса

Создание экземпляра

Example e = null;// e.getNumber () -> NullPointerException

e = new Example (3);// e.getNumber () -> 3

e.number = 10;// e.getNumber () -> 10

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 18 / 42

Page 19: 2012 10 03_java_lecture04

Использование класса

Доступ к статическим членам

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 3 октября 2012 19 / 42

Page 20: 2012 10 03_java_lecture04

Наследование

1 Основы ООП

2 Объявление класса

3 Использование класса

4 Наследование

5 Пакеты

6 Модификаторы доступа

7 Вложенные классы

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 20 / 42

Page 21: 2012 10 03_java_lecture04

Наследование

Объявление класса-наследника

class Derived extends Example {

/* derived class content */

}

Java не поддерживает множественное наследование,но есть интерфейсыВсе классы наследуют java.lang.Object

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 21 / 42

Page 22: 2012 10 03_java_lecture04

Наследование

Конструктор класса-наследника

class Derived extends Example {

Derived () {this (10);

}

Derived(int number) {super(number );

}

}

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 22 / 42

Page 23: 2012 10 03_java_lecture04

Наследование

Переопределение методов

class Derived extends Example {

@Overrideint getNumber () {

int number = super.getNumber ();return Math.max(10, number );

}

}

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 23 / 42

Page 24: 2012 10 03_java_lecture04

Наследование

Полиморфизм в действии

Example e = new Example (3);// e.getNumber () -> 3

e = new Derived (3);// e.getNumber () -> 10

Derived d = (Derived) e;// d.getNumber () -> 10

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 24 / 42

Page 25: 2012 10 03_java_lecture04

Наследование

Оператор 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 3 октября 2012 25 / 42

Page 26: 2012 10 03_java_lecture04

Наследование

Интерфейсы

Интерфейс определяет возможные сообщения,но не их реализацию

interface ExampleInterface {int getNumber ();

}

Класс может реализовывать несколько интерфейсов

class Example implements ExampleInterface {int getNumber () {

// implementation}

}

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 26 / 42

Page 27: 2012 10 03_java_lecture04

Наследование

Модификатор final

final class Example {...}нельзя создать класс-наследник

final int getNumber() {...}нельзя переопределить метод в дочернем классе

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 27 / 42

Page 28: 2012 10 03_java_lecture04

Наследование

Модификатор abstract

abstract class Example {...}нельзя создать экземпляр класса

abstract int getNumber();метод без реализации (класс должен быть абстрактным)

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 28 / 42

Page 29: 2012 10 03_java_lecture04

Наследование

java.lang.Object

String toString()

boolean equals(Object obj)

int hashCode()

Class getClass()

void wait() — три вариантаvoid notify()void notifyAll()

void finalize()void clone()

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42

Page 30: 2012 10 03_java_lecture04

Наследование

java.lang.Object

String toString()

boolean equals(Object obj)

int hashCode()

Class getClass()

void wait() — три вариантаvoid notify()void notifyAll()

void finalize()void clone()

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42

Page 31: 2012 10 03_java_lecture04

Наследование

java.lang.Object

String toString()

boolean equals(Object obj)

int hashCode()

Class getClass()

void wait() — три вариантаvoid notify()void notifyAll()

void finalize()void clone()

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42

Page 32: 2012 10 03_java_lecture04

Наследование

java.lang.Object

String toString()

boolean equals(Object obj)

int hashCode()

Class getClass()

void wait() — три вариантаvoid notify()void notifyAll()

void finalize()void clone()

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42

Page 33: 2012 10 03_java_lecture04

Наследование

java.lang.Object

String toString()

boolean equals(Object obj)

int hashCode()

Class getClass()

void wait() — три вариантаvoid notify()void notifyAll()

void finalize()void clone()

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42

Page 34: 2012 10 03_java_lecture04

Наследование

java.lang.Object

String toString()

boolean equals(Object obj)

int hashCode()

Class getClass()

void wait() — три вариантаvoid notify()void notifyAll()

void finalize()void clone()

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 29 / 42

Page 35: 2012 10 03_java_lecture04

Наследование

Пример иерархии классов из JDK

java.lang.Objectjava.lang.Number

java.lang.Integerjava.lang.Double

java.lang.Boolean

java.lang.Character

java.lang.String

java.lang.AbstractStringBuilderjava.lang.StringBuilderjava.lang.StringBuffer

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 30 / 42

Page 36: 2012 10 03_java_lecture04

Пакеты

1 Основы ООП

2 Объявление класса

3 Использование класса

4 Наследование

5 Пакеты

6 Модификаторы доступа

7 Вложенные классы

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 31 / 42

Page 37: 2012 10 03_java_lecture04

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 32 / 42

Page 38: 2012 10 03_java_lecture04

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 32 / 42

Page 39: 2012 10 03_java_lecture04

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 32 / 42

Page 40: 2012 10 03_java_lecture04

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2012;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2012/

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 33 / 42

Page 41: 2012 10 03_java_lecture04

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2012;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2012/

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 33 / 42

Page 42: 2012 10 03_java_lecture04

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2012;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2012/

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 33 / 42

Page 43: 2012 10 03_java_lecture04

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2012.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2012.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 34 / 42

Page 44: 2012 10 03_java_lecture04

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2012.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2012.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 34 / 42

Page 45: 2012 10 03_java_lecture04

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2012.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2012.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 34 / 42

Page 46: 2012 10 03_java_lecture04

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 35 / 42

Page 47: 2012 10 03_java_lecture04

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 35 / 42

Page 48: 2012 10 03_java_lecture04

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 35 / 42

Page 49: 2012 10 03_java_lecture04

Модификаторы доступа

1 Основы ООП

2 Объявление класса

3 Использование класса

4 Наследование

5 Пакеты

6 Модификаторы доступа

7 Вложенные классы

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 36 / 42

Page 50: 2012 10 03_java_lecture04

Модификаторы доступа

publicдоступ для всех

protectedдоступ в пределах пакета и дочерних классов

privateдоступ в пределах класса

по умолчанию (нет ключевого слова)доступ в пределах пакета

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 37 / 42

Page 51: 2012 10 03_java_lecture04

Вложенные классы

1 Основы ООП

2 Объявление класса

3 Использование класса

4 Наследование

5 Пакеты

6 Модификаторы доступа

7 Вложенные классы

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 38 / 42

Page 52: 2012 10 03_java_lecture04

Вложенные классы

Можно объявить несколько классов в одном файле .java

Только один класс может быть public,остальные должны быть с пакетным доступом

Эффект ничем не отличается от создания отдельного java-файладля каждого класса

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 39 / 42

Page 53: 2012 10 03_java_lecture04

Вложенные классы

Можно объявить класс внутри другого класса

Такие классы имеют доступ к private-членам друг друга

Экземпляр вложенного класса связан с экземпляром внешнегокласса

Если связь не нужна, вложенный класс объявляют смодификатором static

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 40 / 42

Page 54: 2012 10 03_java_lecture04

Вложенные классы

class Example {

private int number;

int getNumber () {return new Inner (). getNumber ();

}

class Inner {int getNumber () {

return number;}

}}

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 41 / 42

Page 55: 2012 10 03_java_lecture04

Что сегодня узнали

Что такое ООП

Как в Java объявить класс, создать его экземплярыи работать с ними

Как в Java реализуется инкапсуляция, наследованиеи полиморфизм

Что такое пакеты и как с ними работать

Алексей Владыкин Классы, объекты и пакеты в Java 3 октября 2012 42 / 42