SlideShare a Scribd company logo
1 of 69
Язык программирования
JAVA
Лекция 2
Классы и Объекты в Java
Моисеенко Антон
canggu@mail.ru
СПГУАП
Кафедра Информационно-Сетевых Технологий
Содержание курса
Программные объекты
■ Последовательность действий при работе с классами
■ Описание класса
■ Создание объектов
■ Механизм создания объектов
■ Использование объекта
Атрибуты класса
Методы класса
Вызов методов с параметрами
Сокрытие реализации
Модификаторы доступа (public, private, protected...)
Содержание курса
Инкапсуляция
Конструктор класса
Применения конструкторов
Пример конструктора класса
Ключевое слово this
Уничтожение объекта
Статические элементы класса
Шаблон Singleton (Одиночка)
Перегрузка методов
Наследование
Венгерская Нотация
Правила именования
Организация пространств имён
Программные объекты
• Объекты – ключевое понятие
объектно-ориентированных технологий
Оглядитесь: мы живём в мире взаимодействующих объектов!
Каждый объект характеризуется состоянием и поведением
Программные объекты
■ Каждый объект характеризуется состоянием и поведением
Программные объекты
■ Объекты в программных системах – аналоги объектов в
реальном мире
■ Состояние хранится в полях
■ Поведение доступно через методы
■ Методы изменяют состояние объекта
Сокрытие внутреннего состояния объекта от посторонних глаз
называется инкапсуляцией. Единственный способ изменить
это состояние – вызвать метод объекта.
Программные объекты
Состояние:
■ Скорость движения
■ Скорость вращения колёс
■ Конфигурация шестерней
Поведение:
■ Переключить передачи
■ Затормозить
■ Изменить темп
Программные объекты
Основные преимущества:
■ Модульность
■ Повторное использование кода
■ Сокрытие внутреннего представления
■ Расширяемость и простота отладки
Классы
■ Класс – множество
объектов, имеющих
схожее поведение и
свойства
■ Класс – это описание
объектов, которые будут
создаваться на основе этого
описания
Классы
■ Аналогия: класс – это проект (чертёж) типового
дома, а объект – это конкретный дом, кот.будет
построен по этому проекту
■ Все дома, построенные по типовому проекту,
будут иметь индивидуальные особенности
(например, адрес)
Последовательность действий
при работе с классами
1. Описать класс
2. Реализовать класс
3. Создать экземпляр класса – объект
4. Работать с объектом, обращаясь к его
свойствам и методам
5. Уничтожить объект (в Java –
автоматически)
Описание класса
■ В отличие от С++, в Java описание (объявление, declaration)
класса совмещено с его определением (definition)
■ Т.е. методы класса нужно реализовывать (писать код тела)
сразу же при их описании
■ Как правило, в Java класс описывается в отдельном файле.
■ Синтаксис:
[Модификатор доступа] class ИмяКласса {
//члены класса – свойства и методы
Модиф._доступа Тип имяСвойства [=значение];
Модиф._доступа Тип имяМетода(параметры) {
//тело метода
}
}
Пример описания класса
// общедоступный класс Автомобиль
public class Car {
public int maxSpeed; //макс. скорость
public int currentSpeed; //текущая скорость
public String vendor; //производитель
public String model; // модель
// закрытая константа «шаг приращения скорости»
private final int speedOnSteep = 5;
// открытый метод «газонуть»
public void stepOn() {
if (currentSpeed + speedOnSteep <= maxSpeed) {
currentSpeed += speedOnSteep;
}
}
// вывод информации об объекте
public void showDescription() {
System.out.println(“Vendor: “ + vendor +
“nModel: “ + model + “nCurrentSpeed: ” +
currentSpeed);
}
}
Создание объектов
■ Тот факт, что в программе описан класс, ещё не означает, что
мы можем работать с его свойствами и вызывать его методы
■ Для работы требуется: 1) объявить переменную типа Класс и
2) создать объект (экземпляр) класса
■ Синтаксис:
ИмяКласса имяОбъекта; //объявление переменной-объекта
имяОбъекта = new ИмяКласса([параметры конструктора]);
Создание объектов
■ Можно совместить объявление и создание объекта:
ИмяКласса имяОбъекта = new ИмяКласса([параметры
конструктора]);
Car kalina;
kalina = new Car();
Car merz = new Car();
■ Например:
Механизм создания объектов
1. Создаться ссылочная переменная в стеке для хранения
адреса будущего объекта
2. В куче (heap) выделяется пространство для размещения
объекта со всеми его свойствами (атрибутами)
3. Атрибуты инициализируются значениями по умолчанию
4. Выполняется явная инициализация атрибутов, если она была
задана программистом
5. Выполняется конструктор
6. Ссылка на созданный объект (его адрес) записывается в
соответствующую ссылочную переменную
Использование объекта
■ Использование объекта осуществляется посредством доступа
к его элементам
■ Для доступа к элементам используется оператор «точка»
после переменной-ссылки на объект:
■ Например:
имяОбъекта.имяСвойства = значение;
имяОбъекта.имяМетода(параметры);
kalina.vendor = “ВАЗ”;
kalina.model = “Калина”;
kalina.maxSpeed = 160;
kalina.showDescription();
merz.vendor = “Mercedes”;
merz.model = “S500”;
merz.maxSpeed = 220;
Атрибуты класса
■ Атрибуты (свойства) класса – это переменные внутри класса
■ Совокупность значений атрибутов объекта описывает
состояние этого объекта
■ Атрибуты класса, в отличие от локальных переменных,
инициализируются значениями по умолчанию
○ Числовые элементы – нулями
○ Символьные – значением ‘0’ (нулевой символ)
○ Логические – значением false
○ Ссылки на объекты – значениями null
■ Атрибуты класса могут быть инициализированы явным
образом при их объявлении:
○ public int age = 0;
Методы класса
■ Метод – это функция, описанная внутри класса
■ Совокупность методов определяет поведение класса
■ Описание метода включает заголовок и тело:
[модификаторы] тип имя(параметры) { тело; }
■ Тело – совокупность операторов
Например:
void printHello() { System.out.println(“hello”); }
■ Метод может принимать параметры и возвращать
значение:
int square(int x) { return x*x; }
Методы класса
■ Если метод возвращает значение простого типа или ссылку
на объект, то его тип должен быть указан в заголовке
метода
■ Также в теле метода должен содержаться хотя бы один
оператор return
■ Если метод не возвращает значение, то в его заголовке
должен быть указан тип void
■ Оператор return немедленно прекращает выполнение
метода и возвращает управление вызывающему методу
■ Хороший стиль – использование одного оператора return в
одном методе
■ Но Java не запрещает многократное использование return
(при наличии соответствующих условий)
Вызов методов с параметрами
■ Формальные параметры описаны в заголовке метода
■ Фактические параметры указываются при его вызове
■ Если в заголовке метода описаны формальные
параметры, то при его вызове нужно указывать
фактические параметры
■ Значение, переданные в качестве фактических
параметров, копируются в переменные-формальные
параметры
■ В качестве фактических параметров могут выступать
константы, переменные или выражения требуемого типа
или типа, приводимого к нему неявно
Вызов методов с параметрами
int k = 12;
double m;
. . .
m = mult( 23.7, k );
…
public double mult( double op1, double op2 ) {
return op1 * op2;
}
Передача параметров в методы
■ В языке Java при вызове методов передача значений
фактических параметров в формальные параметры
осуществляется копированием.
■ Изменение значения формального параметра не влияет на
значение фактического параметра.
■ В этой связи утверждается, что значение из фактических
параметров в формальные осуществляется по значению.
Передача параметров в методы
■ При передаче ссылок на объекты осуществляется
копирование фактического параметра, то есть копируется
ссылка. После такого копирования, и фактический
параметр, и формальный параметр, ссылаются на один и
тот же объект.
■ Напоминание: все объекты в Java являются ссылками
Сокрытие реализации
■ Важнейшим принципом ООП является отделение
изменяющейся составляющей от постоянной. Например, при
изменении версии библиотеки видная внешним программам
часть остается неизменной, меняется только внутренняя
реализация.
■ Внешняя часть – определяет открытое поведение объекта,
тогда как внутренняя реализация скрывается.
■ Мотивы
■ удобство проектирования
■ надежность кода
Модификаторы доступа
■ Для решения проблемы сокрытия реализации в Java
используются модификаторы доступа. Уровни доступа
варьируются от «доступа ко всему» до минимального.
■ В Java существуют следующие модификаторы доступа:
■ public
■ protected
■ private
■ доступ в пределах пакета
Модификатор public
Модификатор public определяет, что следующее за ним
объявление доступно всем, и в том числе произвольным
программам клиентам.
package ru.sbs.jc;
public class Cookie {
public void getApple() { ... }
private void getOrange() { ... }
}
public class Dinner {
public void run() {
Cookie cookie = new Cookie();
cookie.getApple(); // метод доступен
cookie.getOrange(); // метод недоступен
}
}
Модификатор private
Модификатор private обозначает, что никто не имеет право
получить доступ к этому члену за исключением его класса, изнутри
методов этого класса.
package ru.sbs.jc;
public class Cookie {
private void getOrange() { ... }
public void makeJuice() {
getOrange(); // метод доступен
}
}
public class Dinner {
public void run() {
Cookie cookie = new Cookie();
cookie.getOrange(); // метод недоступен
}
}
Модификатор protected
■ Модификатор protected обозначает, что никто не имеет право
получить доступ к этому члену за исключением его класса, и классов
унаследованных от него.
public class Cookie {
protected void getOrange() { ... }
}
public class Cake extends Cookie {
public void run() {
getOrange(); // метод доступен
}
}
public class Dinner {
public void run() {
Cookie cookie = new Cookie();
cookie.getOrange(); // метод недоступен
}
}
Модификатор «в пределах пакета»
Если вообще не указывать модификатор, то мы получим доступ по
умолчанию – в пределах пакета. Поле будет доступно только классам в
этом пакете.
package ru.sbs.jc;
public class Cookie {
void getOrange() { ... }
}
package ru.sbs.jc;
public class Cake {
public void run() {
Cookie cookie = new Cookie();
cookie.getOrange(); // метод доступен
}
}
Инкапсуляция
Инкапсуляция – помещение данных и методов в классы в комбинации с
сокрытием реализации.
Результатом является тип данных, обладающий характеристиками и
поведением.
Инкапсуляция
public class A {
private int id;
public A(int id) {
setId(id);
}
public int getId() { return id; }
public void setId(int value) { id = value; }
}
public class B {
public void run() {
A a1 = new A(1);
A a2 = new A(2);
}
}
Конструктор класса
class Rock {
int id;
public Rock (int value) {
id = value;
}
}
Конструктор класса
■ Конструктор класса – это специальный метод,
название которого совпадает с именем класса
■ Конструктор вызывается автоматически при
создании объекта
■ Конструктор не может возвращать значение
■ Каждый класс обязан иметь конструктор.
Конструктор класса
Если в классе никакого конструктора явно не написано,
то система автоматически создает конструктор без
параметров, который называется конструктором по
умолчанию.
class Bird {
int i;
}
public class App {
public static void main(String[] args) {
Bird bird = new Bird(); // конструктор по умолчанию
}
}
Конструктор класса
■ Если в классе явно описан какой-либо конструктор,
то конструктор по умолчанию системой не создается
■ Конструкторы также, как и другие методы, может
иметь модификатор доступа
■ Один класс может иметь несколько конструкторов с
разными параметрами (перегрузка (overload)
конструктора)
Применения конструкторов
■ С помощью конструкторов можно управлять
процессом создания объекта и производить какие-то
действия, обычно связанные с первичной
настройкой (инициализацией) объекта:
▪ присвоение атрибутам значений по умолчанию
▪ соединение с БД
▪ соединение с сетью
▪ создание других объектов
▪ и др.
Пример конструктора класса
public class Car {
public int maxSpeed; //макс. скорость
public int currentSpeed; //текущая скорость
public String vendor; //производитель
public String model; // модель
// закрытая константа «шаг приращения скорости»
private final int speedOnSteep = 5;
// конструктор класса
public Car(int maxSp, String vend, String model) {
maxSpeed = maxSp;
vendor = vend;
this.model = model;//используем ссылку this на текущий
объект
}
// другие методы ….
}
//Car c = new Car(); Ошибка! Конструктора по умолчанию без
параметров нет
Car kalina = new Car(160, “ВАЗ”, “Калина”);
Ключевое слово this
■ Ключевое слово this употребляется только внутри метода и
дает ссылку на объект, для которого этот метод был
вызван.
■ Идентификатор this подразумевает – этот объект.
■ С помощью this можно:
▪ обращаться к атрибутам текущего объекта
▪ вызывать методы текущего объекта
▪ передавать ссылку на текущий объект методам другого
класса
Ключевое слово this
public class Flower {
private int id;
Flower(int id) {
this.id = id;
}
Flower() {
this(0);
}
}
Уничтожение объекта
■ В языке Java нет необходимости самостоятельно уничтожать
объекты (достаточно ссылке присвоить значение null)
■ Как только исчезает последняя ссылка на объект, объект
считается завершенным и уничтожается сборщиком мусора
(garbage collector), специальным механизмом JVM.
■ Преимущества: отсутствие утечек памяти и эффективная ее
организация.
public class App {
public void run() {
String st;
st = new String(“1”);
st = new String(“2”); // “1” -- удаляется
}
}
Статические элементы класса
■ Статические элементы класса существуют на уровне
определения класса, но не на уровне порожденного от него
экземпляра и не участвуют в наследовании. Для метода
static нет ссылки this.
■ Статическими могут быть как поля, так и методы. Для
инициализации статически полей существуют блок static.
class Spoon {
static int i;
static {
i = 47;
}
public static void main(String[] args) {
System.out.println(i);
}
}
Статические элементы, схема
Класс
public int method_a(int a) {
return a + 1;
}
public int method_b(int b) {
return b - 1;
}
public static int method_c()
{
return 0;
}
public int method_a(1) {
return 1 + 1;
}
public int method_b(1) {
return 1 - 1;
}
Объект 1
public int method_a(2) {
return 2 + 1;
}
public int method_b(2) {
return 2 - 1;
}
Объект 2
public
static int method_c() {
return
0;
}
Шаблон Singleton (Одиночка)
Не должно быть больше одного экземпляра класса,
например нужно иметь только один источник
некоторой информации.
Шаблон Singleton (Одиночка)
public class Foo {
private static Foo instance = null;
protected Foo(...) {
...
}
public static final Foo getInstance() {
if (instance == null) {
instance = new Foo(...)
}
return instance;
}
}
Перегрузка методов
Перегрузка методов –
использование методов с
одинаковыми именами, но
разными аргументами.
Каждый перегруженный метод должен иметь уникальный
список аргументов.
Мотив – одинаковое поведение для разных типов.
Перегрузка методов (Overloading)
Пример:
void method1();
void method1(int i);
void method1(string s);
void method1(int i, string s);
Конструктор:
public ClassName()
Перегрузка конструкторов:
public ClassName()
public ClassName(int param)
Наследование
■ Механизм построения иерархии классов
■ Иерархия – отношение «предок»->«потомок»
(родительский-дочерний классы, суперкласс-
подкласс, порождающий-порождённый
классы)
■ Каждый порожденный класс иерархии имеет
доступ к коду и данным всех порождающих
классов (к элементом, разрешённым
установленной областью видимости)
■ Наследование – мощный механизм
повторного использования программного
кода
Наследование в Java
■ Для того, чтобы указать, что один класс является
потомком (производным) от другого класса,
необходимо после его имени поставить ключевое
слово extends и имя родительского класса:
public class дочерний_класс extends родительский_класс
{
}
■ Модификатор доступа protected позволяет открыть
члены класса всем потомкам этого класса, для
остальных они остаются недоступными
Ссылка super
■ В чём-то похожа на this
■ Ссылается на родительский класс
■ Можно применять двумя способами:
○ получать доступ к открытым (public) и
защищённым (protected) элементам
родительского класса
например, super.x1 = 10;
○ вызывать конструктор родительского класса.
Вызов конструктора родительского элемента
super должен быть первым выражением в
конструкторе дочернего элемента:
public Square(Graphics g) { super(g); }
Пример: иерархия геометрических
фигур
■ Среди геом.фигур можно выделить отношения
обобщения-специализации
■ Например, квадрат является ромбом с прямыми
углами
■ Квадрат является прямоугольником с
одинаковыми сторонами
■ Круг является эллипсом с одинаковыми
радиусами
Наследование: объявление класса-
наследника
■ Java не поддерживает множественное
наследование,но есть интерфейсы
■ Все классы наследуют java.lang.Object
class Derived extends Example {
/* derived class content */
}
Наследование: конструктор класса-
наследника
class Derived extends Example {
Derived () {
this (10);
}
Derived (int number ) {
super ( number );
}
}
Наследование: переопределение
методов
class Derived extends Example {
@Override
int getNumber () {
int number = super.getNumber();
return Math.max(10,number);
}
}
Наследование: Полиморфизм в
действии
Example e = new Example (3);
// e. getNumber () -> 3
e = new Derived (3);
// e. getNumber () -> 10
Derived d = ( Derived ) e;
// d. getNumber () -> 10
Наследование: оператор 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
Наследование: интерфейсы
Интерфейс определяет возможные сообщения,
но не их реализацию
interface ExampleInterface {
int getNumber ();
}
Класс может реализовывать несколько интерфейсов
class Example implements ExampleInterface {
int getNumber () {
// implementation
}
}
Наследование: Модификатор final
final class Example {...}
нельзя создать класс-наследник
final int getNumber() {...}
нельзя переопределить метод в дочернем классе
Наследование: модификатор abstract
abstract class Example {...}
нельзя создать экземпляр класса
abstract int getNumber();
метод без реализации (класс должен быть
абстрактным)
Пакеты в Java
■ Пакет (package) – это способ группировки
классов по функциональному назначению
■ Пакеты Java обеспечивают уникальные
пространства имен
■ Пакеты могут образовывать иерархическую
древовидную структуру
Пакеты в Java
■ Пакет верхнего уровня проекта должен иметь
уникальное имя, не совпадающее с именами
других глобальных пакетов проекта
■ Пакеты нижнего уровня обычно связаны с
функциональным назначением классов,
находящихся в данном пакете
■ Пакет, который содержит группу классов,
объединяет их по некоторому смыслу
Пакеты в Java
■ В пакет объединяются классы, сходные по
функциональному назначению
■ Реализуют принцип модульности
■ Полное имя класса включает имена пакета и
всех подпакетов, в котором он описан
Пакеты в Java
Project_DIR
|
|-- classes
| `-- zoostore
| |-- model
| | `-- Cat.class
| |
| `-- test
| `-- TestCats.class
|
`-- src
`-- zoostore
|-- model
| `-- Cat.java
|
`-- test
`-- TestCats.java
Структура директорий, в которых
хранятся файлы классов, должна
соответствовать структуре
пакетов.
При этом желательно файлы
исходных кодов и файлы классов
размещать отдельно, что
повышает управляемость
Описание пакета
■ Указать имя пакета, в котором находится класс,
можно с помощью директивы package
○ package carspack;
■ Она должна быть самой первой командой в файле
■ До неё могут находиться только комментарии и
пустые строки
■ Если директива package не указана в файле, то
классы из него всё равно помещаются в пакет по
умолчанию с именем default
■ Примечание: имена пакетов принято указывать в
нижнем регистре
Директива import
■ Позволяет включать один класс или все классы
пакета в текущий файл
■ Это позволяет использовать короткие имена
классов
■ Пример:
○ import java.util.Random; // подключение класса
○ import java.awt.*; // подключение всех классов
пакета
Венгерская Нотация
■ Использовалась в BCPL
■ Префикс указывает на тип данных
■ Была действительно нужна, поскольку в языке был
только один тип данных
■ Сегодня осталось только как рудимент в WinAPI
(всякие szClassName).
■ В языках программирования с динамической
типизацией (Python, JavaScript, PHP) практически не
используется
Правила именования
■ Классы: CamelCase
■ Поля класса, методы: camelCase
■ Константы:
ALL_CAPITALS_WITH_UNDERSCORES
■ Локальные переменные: camelCase
Код должен соответствовать Code Conventions
for the Java Programming Language
Организация пространств имён
■ Аналог пространства имён в Java – пакет
(package).
■ Пакеты имеют иерархическую структуру
■ Обычно именуются маленькими буквами
■ Одному пакету соответствует одна
директория в файловой системе
Вопросы?

More Related Content

What's hot

Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеmetaform
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#bolevik
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.Igor Shkulipa
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.Igor Shkulipa
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.Igor Shkulipa
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.Igor Shkulipa
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 

What's hot (14)

Лекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследованиеЛекция 6_принципы ООП : инкапсуляция, наследование
Лекция 6_принципы ООП : инкапсуляция, наследование
 
Наследование и полиморфизм
Наследование и полиморфизмНаследование и полиморфизм
Наследование и полиморфизм
 
Java: вчера, сегодня, завтра
Java: вчера, сегодня, завтраJava: вчера, сегодня, завтра
Java: вчера, сегодня, завтра
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 

Similar to Java Core. Lecture# 2. Classes & objects.

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Javaitc73
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsNoveo
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptTimur Shemsedinov
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работамstudent_kai
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classesMERA_school
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3Technopark
 
C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.Igor Shkulipa
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3Technopark
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxrobete3065
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 

Similar to Java Core. Lecture# 2. Classes & objects. (20)

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
 
Lec 2
Lec 2Lec 2
Lec 2
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
Метапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScriptМетапрограммирование с примерами на JavaScript
Метапрограммирование с примерами на JavaScript
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работам
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classes
 
C++ осень 2012 лекция 3
C++ осень 2012 лекция 3C++ осень 2012 лекция 3
C++ осень 2012 лекция 3
 
C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptx
 
Bytecode
BytecodeBytecode
Bytecode
 
лек13 3
лек13 3лек13 3
лек13 3
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 

Java Core. Lecture# 2. Classes & objects.

  • 1. Язык программирования JAVA Лекция 2 Классы и Объекты в Java Моисеенко Антон canggu@mail.ru СПГУАП Кафедра Информационно-Сетевых Технологий
  • 2. Содержание курса Программные объекты ■ Последовательность действий при работе с классами ■ Описание класса ■ Создание объектов ■ Механизм создания объектов ■ Использование объекта Атрибуты класса Методы класса Вызов методов с параметрами Сокрытие реализации Модификаторы доступа (public, private, protected...)
  • 3. Содержание курса Инкапсуляция Конструктор класса Применения конструкторов Пример конструктора класса Ключевое слово this Уничтожение объекта Статические элементы класса Шаблон Singleton (Одиночка) Перегрузка методов Наследование Венгерская Нотация Правила именования Организация пространств имён
  • 4. Программные объекты • Объекты – ключевое понятие объектно-ориентированных технологий Оглядитесь: мы живём в мире взаимодействующих объектов! Каждый объект характеризуется состоянием и поведением
  • 5. Программные объекты ■ Каждый объект характеризуется состоянием и поведением
  • 6. Программные объекты ■ Объекты в программных системах – аналоги объектов в реальном мире ■ Состояние хранится в полях ■ Поведение доступно через методы ■ Методы изменяют состояние объекта Сокрытие внутреннего состояния объекта от посторонних глаз называется инкапсуляцией. Единственный способ изменить это состояние – вызвать метод объекта.
  • 7. Программные объекты Состояние: ■ Скорость движения ■ Скорость вращения колёс ■ Конфигурация шестерней Поведение: ■ Переключить передачи ■ Затормозить ■ Изменить темп
  • 8. Программные объекты Основные преимущества: ■ Модульность ■ Повторное использование кода ■ Сокрытие внутреннего представления ■ Расширяемость и простота отладки
  • 9. Классы ■ Класс – множество объектов, имеющих схожее поведение и свойства ■ Класс – это описание объектов, которые будут создаваться на основе этого описания
  • 10. Классы ■ Аналогия: класс – это проект (чертёж) типового дома, а объект – это конкретный дом, кот.будет построен по этому проекту ■ Все дома, построенные по типовому проекту, будут иметь индивидуальные особенности (например, адрес)
  • 11. Последовательность действий при работе с классами 1. Описать класс 2. Реализовать класс 3. Создать экземпляр класса – объект 4. Работать с объектом, обращаясь к его свойствам и методам 5. Уничтожить объект (в Java – автоматически)
  • 12. Описание класса ■ В отличие от С++, в Java описание (объявление, declaration) класса совмещено с его определением (definition) ■ Т.е. методы класса нужно реализовывать (писать код тела) сразу же при их описании ■ Как правило, в Java класс описывается в отдельном файле. ■ Синтаксис: [Модификатор доступа] class ИмяКласса { //члены класса – свойства и методы Модиф._доступа Тип имяСвойства [=значение]; Модиф._доступа Тип имяМетода(параметры) { //тело метода } }
  • 13. Пример описания класса // общедоступный класс Автомобиль public class Car { public int maxSpeed; //макс. скорость public int currentSpeed; //текущая скорость public String vendor; //производитель public String model; // модель // закрытая константа «шаг приращения скорости» private final int speedOnSteep = 5; // открытый метод «газонуть» public void stepOn() { if (currentSpeed + speedOnSteep <= maxSpeed) { currentSpeed += speedOnSteep; } } // вывод информации об объекте public void showDescription() { System.out.println(“Vendor: “ + vendor + “nModel: “ + model + “nCurrentSpeed: ” + currentSpeed); } }
  • 14. Создание объектов ■ Тот факт, что в программе описан класс, ещё не означает, что мы можем работать с его свойствами и вызывать его методы ■ Для работы требуется: 1) объявить переменную типа Класс и 2) создать объект (экземпляр) класса ■ Синтаксис: ИмяКласса имяОбъекта; //объявление переменной-объекта имяОбъекта = new ИмяКласса([параметры конструктора]);
  • 15. Создание объектов ■ Можно совместить объявление и создание объекта: ИмяКласса имяОбъекта = new ИмяКласса([параметры конструктора]); Car kalina; kalina = new Car(); Car merz = new Car(); ■ Например:
  • 16. Механизм создания объектов 1. Создаться ссылочная переменная в стеке для хранения адреса будущего объекта 2. В куче (heap) выделяется пространство для размещения объекта со всеми его свойствами (атрибутами) 3. Атрибуты инициализируются значениями по умолчанию 4. Выполняется явная инициализация атрибутов, если она была задана программистом 5. Выполняется конструктор 6. Ссылка на созданный объект (его адрес) записывается в соответствующую ссылочную переменную
  • 17. Использование объекта ■ Использование объекта осуществляется посредством доступа к его элементам ■ Для доступа к элементам используется оператор «точка» после переменной-ссылки на объект: ■ Например: имяОбъекта.имяСвойства = значение; имяОбъекта.имяМетода(параметры); kalina.vendor = “ВАЗ”; kalina.model = “Калина”; kalina.maxSpeed = 160; kalina.showDescription(); merz.vendor = “Mercedes”; merz.model = “S500”; merz.maxSpeed = 220;
  • 18. Атрибуты класса ■ Атрибуты (свойства) класса – это переменные внутри класса ■ Совокупность значений атрибутов объекта описывает состояние этого объекта ■ Атрибуты класса, в отличие от локальных переменных, инициализируются значениями по умолчанию ○ Числовые элементы – нулями ○ Символьные – значением ‘0’ (нулевой символ) ○ Логические – значением false ○ Ссылки на объекты – значениями null ■ Атрибуты класса могут быть инициализированы явным образом при их объявлении: ○ public int age = 0;
  • 19. Методы класса ■ Метод – это функция, описанная внутри класса ■ Совокупность методов определяет поведение класса ■ Описание метода включает заголовок и тело: [модификаторы] тип имя(параметры) { тело; } ■ Тело – совокупность операторов Например: void printHello() { System.out.println(“hello”); } ■ Метод может принимать параметры и возвращать значение: int square(int x) { return x*x; }
  • 20. Методы класса ■ Если метод возвращает значение простого типа или ссылку на объект, то его тип должен быть указан в заголовке метода ■ Также в теле метода должен содержаться хотя бы один оператор return ■ Если метод не возвращает значение, то в его заголовке должен быть указан тип void ■ Оператор return немедленно прекращает выполнение метода и возвращает управление вызывающему методу ■ Хороший стиль – использование одного оператора return в одном методе ■ Но Java не запрещает многократное использование return (при наличии соответствующих условий)
  • 21. Вызов методов с параметрами ■ Формальные параметры описаны в заголовке метода ■ Фактические параметры указываются при его вызове ■ Если в заголовке метода описаны формальные параметры, то при его вызове нужно указывать фактические параметры ■ Значение, переданные в качестве фактических параметров, копируются в переменные-формальные параметры ■ В качестве фактических параметров могут выступать константы, переменные или выражения требуемого типа или типа, приводимого к нему неявно
  • 22. Вызов методов с параметрами int k = 12; double m; . . . m = mult( 23.7, k ); … public double mult( double op1, double op2 ) { return op1 * op2; }
  • 23. Передача параметров в методы ■ В языке Java при вызове методов передача значений фактических параметров в формальные параметры осуществляется копированием. ■ Изменение значения формального параметра не влияет на значение фактического параметра. ■ В этой связи утверждается, что значение из фактических параметров в формальные осуществляется по значению.
  • 24. Передача параметров в методы ■ При передаче ссылок на объекты осуществляется копирование фактического параметра, то есть копируется ссылка. После такого копирования, и фактический параметр, и формальный параметр, ссылаются на один и тот же объект. ■ Напоминание: все объекты в Java являются ссылками
  • 25. Сокрытие реализации ■ Важнейшим принципом ООП является отделение изменяющейся составляющей от постоянной. Например, при изменении версии библиотеки видная внешним программам часть остается неизменной, меняется только внутренняя реализация. ■ Внешняя часть – определяет открытое поведение объекта, тогда как внутренняя реализация скрывается. ■ Мотивы ■ удобство проектирования ■ надежность кода
  • 26. Модификаторы доступа ■ Для решения проблемы сокрытия реализации в Java используются модификаторы доступа. Уровни доступа варьируются от «доступа ко всему» до минимального. ■ В Java существуют следующие модификаторы доступа: ■ public ■ protected ■ private ■ доступ в пределах пакета
  • 27. Модификатор public Модификатор public определяет, что следующее за ним объявление доступно всем, и в том числе произвольным программам клиентам. package ru.sbs.jc; public class Cookie { public void getApple() { ... } private void getOrange() { ... } } public class Dinner { public void run() { Cookie cookie = new Cookie(); cookie.getApple(); // метод доступен cookie.getOrange(); // метод недоступен } }
  • 28. Модификатор private Модификатор private обозначает, что никто не имеет право получить доступ к этому члену за исключением его класса, изнутри методов этого класса. package ru.sbs.jc; public class Cookie { private void getOrange() { ... } public void makeJuice() { getOrange(); // метод доступен } } public class Dinner { public void run() { Cookie cookie = new Cookie(); cookie.getOrange(); // метод недоступен } }
  • 29. Модификатор protected ■ Модификатор protected обозначает, что никто не имеет право получить доступ к этому члену за исключением его класса, и классов унаследованных от него. public class Cookie { protected void getOrange() { ... } } public class Cake extends Cookie { public void run() { getOrange(); // метод доступен } } public class Dinner { public void run() { Cookie cookie = new Cookie(); cookie.getOrange(); // метод недоступен } }
  • 30. Модификатор «в пределах пакета» Если вообще не указывать модификатор, то мы получим доступ по умолчанию – в пределах пакета. Поле будет доступно только классам в этом пакете. package ru.sbs.jc; public class Cookie { void getOrange() { ... } } package ru.sbs.jc; public class Cake { public void run() { Cookie cookie = new Cookie(); cookie.getOrange(); // метод доступен } }
  • 31. Инкапсуляция Инкапсуляция – помещение данных и методов в классы в комбинации с сокрытием реализации. Результатом является тип данных, обладающий характеристиками и поведением.
  • 32. Инкапсуляция public class A { private int id; public A(int id) { setId(id); } public int getId() { return id; } public void setId(int value) { id = value; } } public class B { public void run() { A a1 = new A(1); A a2 = new A(2); } }
  • 33. Конструктор класса class Rock { int id; public Rock (int value) { id = value; } }
  • 34. Конструктор класса ■ Конструктор класса – это специальный метод, название которого совпадает с именем класса ■ Конструктор вызывается автоматически при создании объекта ■ Конструктор не может возвращать значение ■ Каждый класс обязан иметь конструктор.
  • 35. Конструктор класса Если в классе никакого конструктора явно не написано, то система автоматически создает конструктор без параметров, который называется конструктором по умолчанию. class Bird { int i; } public class App { public static void main(String[] args) { Bird bird = new Bird(); // конструктор по умолчанию } }
  • 36. Конструктор класса ■ Если в классе явно описан какой-либо конструктор, то конструктор по умолчанию системой не создается ■ Конструкторы также, как и другие методы, может иметь модификатор доступа ■ Один класс может иметь несколько конструкторов с разными параметрами (перегрузка (overload) конструктора)
  • 37. Применения конструкторов ■ С помощью конструкторов можно управлять процессом создания объекта и производить какие-то действия, обычно связанные с первичной настройкой (инициализацией) объекта: ▪ присвоение атрибутам значений по умолчанию ▪ соединение с БД ▪ соединение с сетью ▪ создание других объектов ▪ и др.
  • 38. Пример конструктора класса public class Car { public int maxSpeed; //макс. скорость public int currentSpeed; //текущая скорость public String vendor; //производитель public String model; // модель // закрытая константа «шаг приращения скорости» private final int speedOnSteep = 5; // конструктор класса public Car(int maxSp, String vend, String model) { maxSpeed = maxSp; vendor = vend; this.model = model;//используем ссылку this на текущий объект } // другие методы …. } //Car c = new Car(); Ошибка! Конструктора по умолчанию без параметров нет Car kalina = new Car(160, “ВАЗ”, “Калина”);
  • 39. Ключевое слово this ■ Ключевое слово this употребляется только внутри метода и дает ссылку на объект, для которого этот метод был вызван. ■ Идентификатор this подразумевает – этот объект. ■ С помощью this можно: ▪ обращаться к атрибутам текущего объекта ▪ вызывать методы текущего объекта ▪ передавать ссылку на текущий объект методам другого класса
  • 40. Ключевое слово this public class Flower { private int id; Flower(int id) { this.id = id; } Flower() { this(0); } }
  • 41. Уничтожение объекта ■ В языке Java нет необходимости самостоятельно уничтожать объекты (достаточно ссылке присвоить значение null) ■ Как только исчезает последняя ссылка на объект, объект считается завершенным и уничтожается сборщиком мусора (garbage collector), специальным механизмом JVM. ■ Преимущества: отсутствие утечек памяти и эффективная ее организация. public class App { public void run() { String st; st = new String(“1”); st = new String(“2”); // “1” -- удаляется } }
  • 42. Статические элементы класса ■ Статические элементы класса существуют на уровне определения класса, но не на уровне порожденного от него экземпляра и не участвуют в наследовании. Для метода static нет ссылки this. ■ Статическими могут быть как поля, так и методы. Для инициализации статически полей существуют блок static. class Spoon { static int i; static { i = 47; } public static void main(String[] args) { System.out.println(i); } }
  • 43. Статические элементы, схема Класс public int method_a(int a) { return a + 1; } public int method_b(int b) { return b - 1; } public static int method_c() { return 0; } public int method_a(1) { return 1 + 1; } public int method_b(1) { return 1 - 1; } Объект 1 public int method_a(2) { return 2 + 1; } public int method_b(2) { return 2 - 1; } Объект 2 public static int method_c() { return 0; }
  • 44. Шаблон Singleton (Одиночка) Не должно быть больше одного экземпляра класса, например нужно иметь только один источник некоторой информации.
  • 45. Шаблон Singleton (Одиночка) public class Foo { private static Foo instance = null; protected Foo(...) { ... } public static final Foo getInstance() { if (instance == null) { instance = new Foo(...) } return instance; } }
  • 46. Перегрузка методов Перегрузка методов – использование методов с одинаковыми именами, но разными аргументами. Каждый перегруженный метод должен иметь уникальный список аргументов. Мотив – одинаковое поведение для разных типов.
  • 47. Перегрузка методов (Overloading) Пример: void method1(); void method1(int i); void method1(string s); void method1(int i, string s); Конструктор: public ClassName() Перегрузка конструкторов: public ClassName() public ClassName(int param)
  • 48. Наследование ■ Механизм построения иерархии классов ■ Иерархия – отношение «предок»->«потомок» (родительский-дочерний классы, суперкласс- подкласс, порождающий-порождённый классы) ■ Каждый порожденный класс иерархии имеет доступ к коду и данным всех порождающих классов (к элементом, разрешённым установленной областью видимости) ■ Наследование – мощный механизм повторного использования программного кода
  • 49. Наследование в Java ■ Для того, чтобы указать, что один класс является потомком (производным) от другого класса, необходимо после его имени поставить ключевое слово extends и имя родительского класса: public class дочерний_класс extends родительский_класс { } ■ Модификатор доступа protected позволяет открыть члены класса всем потомкам этого класса, для остальных они остаются недоступными
  • 50. Ссылка super ■ В чём-то похожа на this ■ Ссылается на родительский класс ■ Можно применять двумя способами: ○ получать доступ к открытым (public) и защищённым (protected) элементам родительского класса например, super.x1 = 10; ○ вызывать конструктор родительского класса. Вызов конструктора родительского элемента super должен быть первым выражением в конструкторе дочернего элемента: public Square(Graphics g) { super(g); }
  • 51. Пример: иерархия геометрических фигур ■ Среди геом.фигур можно выделить отношения обобщения-специализации ■ Например, квадрат является ромбом с прямыми углами ■ Квадрат является прямоугольником с одинаковыми сторонами ■ Круг является эллипсом с одинаковыми радиусами
  • 52. Наследование: объявление класса- наследника ■ Java не поддерживает множественное наследование,но есть интерфейсы ■ Все классы наследуют java.lang.Object class Derived extends Example { /* derived class content */ }
  • 53. Наследование: конструктор класса- наследника class Derived extends Example { Derived () { this (10); } Derived (int number ) { super ( number ); } }
  • 54. Наследование: переопределение методов class Derived extends Example { @Override int getNumber () { int number = super.getNumber(); return Math.max(10,number); } }
  • 55. Наследование: Полиморфизм в действии Example e = new Example (3); // e. getNumber () -> 3 e = new Derived (3); // e. getNumber () -> 10 Derived d = ( Derived ) e; // d. getNumber () -> 10
  • 56. Наследование: оператор 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
  • 57. Наследование: интерфейсы Интерфейс определяет возможные сообщения, но не их реализацию interface ExampleInterface { int getNumber (); } Класс может реализовывать несколько интерфейсов class Example implements ExampleInterface { int getNumber () { // implementation } }
  • 58. Наследование: Модификатор final final class Example {...} нельзя создать класс-наследник final int getNumber() {...} нельзя переопределить метод в дочернем классе
  • 59. Наследование: модификатор abstract abstract class Example {...} нельзя создать экземпляр класса abstract int getNumber(); метод без реализации (класс должен быть абстрактным)
  • 60. Пакеты в Java ■ Пакет (package) – это способ группировки классов по функциональному назначению ■ Пакеты Java обеспечивают уникальные пространства имен ■ Пакеты могут образовывать иерархическую древовидную структуру
  • 61. Пакеты в Java ■ Пакет верхнего уровня проекта должен иметь уникальное имя, не совпадающее с именами других глобальных пакетов проекта ■ Пакеты нижнего уровня обычно связаны с функциональным назначением классов, находящихся в данном пакете ■ Пакет, который содержит группу классов, объединяет их по некоторому смыслу
  • 62. Пакеты в Java ■ В пакет объединяются классы, сходные по функциональному назначению ■ Реализуют принцип модульности ■ Полное имя класса включает имена пакета и всех подпакетов, в котором он описан
  • 63. Пакеты в Java Project_DIR | |-- classes | `-- zoostore | |-- model | | `-- Cat.class | | | `-- test | `-- TestCats.class | `-- src `-- zoostore |-- model | `-- Cat.java | `-- test `-- TestCats.java Структура директорий, в которых хранятся файлы классов, должна соответствовать структуре пакетов. При этом желательно файлы исходных кодов и файлы классов размещать отдельно, что повышает управляемость
  • 64. Описание пакета ■ Указать имя пакета, в котором находится класс, можно с помощью директивы package ○ package carspack; ■ Она должна быть самой первой командой в файле ■ До неё могут находиться только комментарии и пустые строки ■ Если директива package не указана в файле, то классы из него всё равно помещаются в пакет по умолчанию с именем default ■ Примечание: имена пакетов принято указывать в нижнем регистре
  • 65. Директива import ■ Позволяет включать один класс или все классы пакета в текущий файл ■ Это позволяет использовать короткие имена классов ■ Пример: ○ import java.util.Random; // подключение класса ○ import java.awt.*; // подключение всех классов пакета
  • 66. Венгерская Нотация ■ Использовалась в BCPL ■ Префикс указывает на тип данных ■ Была действительно нужна, поскольку в языке был только один тип данных ■ Сегодня осталось только как рудимент в WinAPI (всякие szClassName). ■ В языках программирования с динамической типизацией (Python, JavaScript, PHP) практически не используется
  • 67. Правила именования ■ Классы: CamelCase ■ Поля класса, методы: camelCase ■ Константы: ALL_CAPITALS_WITH_UNDERSCORES ■ Локальные переменные: camelCase Код должен соответствовать Code Conventions for the Java Programming Language
  • 68. Организация пространств имён ■ Аналог пространства имён в Java – пакет (package). ■ Пакеты имеют иерархическую структуру ■ Обычно именуются маленькими буквами ■ Одному пакету соответствует одна директория в файловой системе