Слайд 2
![ОБЗОР ТЕХНОЛОГИИ JAVA](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-1.jpg)
Слайд 3
![Язык Java Язык программирования Java – язык программирования высокого уровня, обладающий характеристиками: Подробнее: http://java.sun.com/docs/white/langenv/](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-2.jpg)
Язык Java
Язык программирования Java – язык программирования высокого уровня, обладающий характеристиками:
Подробнее:
http://java.sun.com/docs/white/langenv/
Слайд 4
![Платформа Java Платформа – окружение из аппаратного или программного обеспечения,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-3.jpg)
Платформа Java
Платформа – окружение из аппаратного или программного обеспечения, в котором
выполняется программа. В большинстве случаев платформа рассматривается как объединение ОС и аппаратного обеспечения (железа), на котором функционирует ОС.
Java-платформа – исключительно программное обеспечение, функционирующее над платформой, основанной на аппаратном обеспечении, позволяющее исполнять Java-программы.
Слайд 5
![Платформа Java http://download.oracle.com/javase/tutorial/getStarted/intro/definition.html](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-4.jpg)
Платформа Java
http://download.oracle.com/javase/tutorial/getStarted/intro/definition.html
Слайд 6
![Создание и выполнение Java-программ: http://download.oracle.com/javase/tutorial/getStarted/intro/definition.html](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-5.jpg)
Создание и выполнение Java-программ:
http://download.oracle.com/javase/tutorial/getStarted/intro/definition.html
Слайд 7
![Переносимость Java-программ http://download.oracle.com/javase/tutorial/getStarted/intro/definition.html](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-6.jpg)
Переносимость Java-программ
http://download.oracle.com/javase/tutorial/getStarted/intro/definition.html
Слайд 8
![КЛАССЫ И ОБЪЕКТЫ](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-7.jpg)
Слайд 9
![Классы основные строительные элементы Java-программы. // заголовок класса class MyClass](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-8.jpg)
Классы основные строительные элементы Java-программы.
// заголовок класса
class MyClass
{
//тело
класса:
// поля, конструкторы и методы
}
Слайд 10
![Заголовок класса Модификатор управления доступом Ключевое слово class Название класса](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-9.jpg)
Заголовок класса
Модификатор управления доступом
Ключевое слово class
Название класса с большой буквы
Имя
класса предка, предваренное словом extends
После слова implements через запятую имена интерфейсов, реализуемых классом
Слайд 11
![Тело класса Члены класса: Поля – переменные и константы, характеризующие](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-10.jpg)
Тело класса
Члены класса:
Поля – переменные и константы, характеризующие объект;
Методы – процедуры,
описывающие поведение объекта;
Вложенные классы;
Вложенные интерфейсы.
Слайд 12
![Модификаторы управления доступом public определяет, что следующие за ним определения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-11.jpg)
Модификаторы управления доступом
public определяет, что следующие за ним определения доступны всем;
private
означает, что следующие за ним определения может использовать только создатель типа, внутри функций членов этого типа;
protected по действию схож с private, за одним исключением: унаследованные классы имеют доступ к членам, помеченным protected, хотя и не имеют доступа к private-членам.
Слайд 13
![Модификаторы управления доступом Уровень класса - модификатор public или никакого;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-12.jpg)
Модификаторы управления доступом
Уровень класса - модификатор public или никакого;
Уровень члена класса
– модификаторы: public, private, protected или никакого.
Слайд 14
![Создание экземпляра класса Этапы: Объявление объектов MyClass object1, object2; Выделение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-13.jpg)
Создание экземпляра класса
Этапы:
Объявление объектов
MyClass object1, object2;
Выделение памяти под объекты
object1 = new
MyClass();
Инициализация объектов
MyClass() – конструктор
Слайд 15
![Особенности конструктора: конструктор имеется в любом классе; конструктор выполняется автоматически](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-14.jpg)
Особенности конструктора:
конструктор имеется в любом классе;
конструктор выполняется автоматически при создании экземпляра
класса;
конструктор не возвращает никакого значения;
конструктор нельзя наследовать и переопределить в подклассе;
конструктор может содержать:
вызов конструктора суперкласса (super);
вызов другого конструктора того же класса (this).
Слайд 16
![Класс DynArray public class DynArray { // класс имеет три](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-15.jpg)
Класс DynArray
public class DynArray {
// класс имеет три поля
int size;
// текущий размер массива
int maxSize; // размер отведенной памяти
int[] array; // сам массив
Слайд 17
![Класс DynArray // аргумент указывает, сколько памяти надо // отвести](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-16.jpg)
Класс DynArray
// аргумент указывает, сколько памяти надо
// отвести под его элементы
public
DynArray(int sz){
this(sz, sz, null);
}
Слайд 18
![Класс DynArray // аргументы указывают, сколько памяти // используется под](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-17.jpg)
Класс DynArray
// аргументы указывают, сколько памяти
// используется под элементы и сколько
//
отведено всего
public DynArray(int sz, int maxSz){
this(sz, maxSz, null);
}
Слайд 19
![Класс DynArray public DynArray(int sz, int maxSz, int[] iniArray) {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-18.jpg)
Класс DynArray
public DynArray(int sz, int maxSz, int[] iniArray) {
size =
sz;
maxSize = (maxSz < sz ? sz : maxSz);
array = new int[maxSize];
if (iniArray != null){
for (int i=0; i < size && i < iniArray.length; i++)
array[i] = iniArray[i];
}
}
Слайд 20
![Класс DynArray // операция выборки элемента public int elementAt(int i){ return array[i]; }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-19.jpg)
Класс DynArray
// операция выборки элемента
public int elementAt(int i){
return array[i];
}
Слайд 21
![Класс DynArray // изменение текущего размера массива, // аргумент delta](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-20.jpg)
Класс DynArray
// изменение текущего размера массива,
// аргумент delta задает размер изменения
public
void resize(int delta){
if (delta > 0) enlarge(delta);
else if (delta < 0) shrink(-delta);
}
Слайд 22
![Класс DynArray // операция расширения массива void enlarge(int delta){ if](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-21.jpg)
Класс DynArray
// операция расширения массива
void enlarge(int delta){
if ((size += delta)
> maxSize) {
maxSize = size;
int[] newArray = new int[maxSize];
for (int i=0; i < size - delta; i++)
newArray[i] = array[i];
array = newArray;
}
}
Слайд 23
![Класс DynArray // операция уменьшения массива void shrink(int delta){ size](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-22.jpg)
Класс DynArray
// операция уменьшения массива
void shrink(int delta){
size = (delta >
size ? 0 : size - delta);
}
Слайд 24
![Класс DynArray // добавление одного нового элемента // (с возможным](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-23.jpg)
Класс DynArray
// добавление одного нового элемента
// (с возможным расширением массива)
void add(int
e){
resize(1);
array[size-1]=e;
}
Слайд 25
![Иерархия классов в Java Вершина иерархии классов Java - класс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-24.jpg)
Иерархия классов в Java
Вершина иерархии классов Java - класс Object;
Все классы
наследники класса Object, т.е. ссылочная переменная типа Object может обращаться к объекту любого класса;
Запрещено множественное наследование.
Посмотреть:
Слайд 26
![Класс Object Методы: equals() сравнивает данный объект на равенство с](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-25.jpg)
Класс Object
Методы:
equals() сравнивает данный объект на равенство с объектом, заданным в
аргументе, возвращает логическое значение.
toString() пытается содержимое объекта преобразовать в строку символов и возвращает объект класса String.
Слайд 27
![Задание: Внести изменения в класс DynArray так, чтобы элементы массива](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-26.jpg)
Задание:
Внести изменения в класс DynArray так, чтобы элементы массива могли быть
экземплярами произвольного класса.
(при определения массива используйте тип данных Object)
Переопределите методы equals() и toString() (класса DynArray).
Напишите класс DynArrayTest, тестирующий работу класса DynArray.
Слайд 28
![Интерфейсы в Java Интерфейс – это явно указанная спецификация набора](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-27.jpg)
Интерфейсы в Java
Интерфейс – это явно указанная спецификация набора методов, которые
должны быть представлены в классе, который реализует эту спецификацию.
Интерфейс – ссылочный тип данных, подобный классу, который может содержать только константы, заголовки методов и вложенные типы (классы и интерфейсы).
Слайд 29
![Определение интерфейса public interface имя extends интерфейс1, интерфейс2 { тип имя_константы = значение; тип_результата имя_метода(параметры_метода); }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-28.jpg)
Определение интерфейса
public interface имя extends интерфейс1, интерфейс2
{
тип имя_константы =
значение;
тип_результата имя_метода(параметры_метода);
}
Слайд 30
![Тело интерфейса Заголовки методов. не содержат фигурных скобок (не определяют](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-29.jpg)
Тело интерфейса
Заголовки методов.
не содержат фигурных скобок (не определяют реализацию);
отделяются точкой с
запятой;
методы являются public, поэтому этот модификатор не пишется.
Слайд 31
![Тело интерфейса Объявление констант. Любая переменная, объявленная в интерфейсе является](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-30.jpg)
Тело интерфейса
Объявление констант.
Любая переменная, объявленная в интерфейсе является public, static и
final поэтому эти модификаторы не пишутся.
Предполагается обязательное присвоение значения константе в теле интерфейса.
Слайд 32
![Реализация интерфейсов class имя_класса [extends суперкласс] [implements интерфейс0 [, интерфейс1...]] { тело класса }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-31.jpg)
Реализация интерфейсов
class имя_класса
[extends суперкласс]
[implements интерфейс0 [, интерфейс1...]]
{ тело
класса }
Слайд 33
![Реализация интерфейсов Интерфейсы можно использовать для импорта в различные классы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-32.jpg)
Реализация интерфейсов
Интерфейсы можно использовать для импорта в различные классы совместно используемых
констант. В том случае, когда вы реализуете в классе какой-либо интерфейс, все имена переменных этого интерфейса будут видимы в классе как константы.
Слайд 34
![Реализация интерфейсов Если интерфейс не включает в себя методы, то](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-33.jpg)
Реализация интерфейсов
Если интерфейс не включает в себя методы, то любой класс,
объявляемый реализацией этого интерфейса, может вообще ничего не реализовывать. Для импорта констант в пространство имен класса предпочтительнее использовать переменные с модификатором final.
Слайд 35
![Реализация интерфейсов Если интерфейс включает в себя заголовки методов, то](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-34.jpg)
Реализация интерфейсов
Если интерфейс включает в себя заголовки методов, то любой класс,
объявляемый реализацией этого интерфейса, должен содержать реализацию всех методов, описанных в интерфейсе.
Слайд 36
![Пример. Классы и интерфейсы. public class IntList { //внутренний касс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-35.jpg)
Пример. Классы и интерфейсы.
public class IntList {
//внутренний касс
static
class ListItem {
int item;
ListItem next;
public ListItem(int i, ListItem n){
item=i;
next=n;
}
};
Слайд 37
![Пример. Классы и интерфейсы. //поля класса int count = 0;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-36.jpg)
Пример. Классы и интерфейсы.
//поля класса
int count = 0;
ListItem
first = null;
ListItem last = null;
Слайд 38
![Пример. Классы и интерфейсы. //создание пустого списка public IntList(){} //создание](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-37.jpg)
Пример. Классы и интерфейсы.
//создание пустого списка
public IntList(){}
//создание копии уже имеющегося списка
public
IntList(final IntList src){
addLast(src);
//добавляет список src в конец списка this
}
Слайд 39
![Пример. Классы и интерфейсы. //добавление элементов в конец списка public](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-38.jpg)
Пример. Классы и интерфейсы.
//добавление элементов в конец списка
public void addLast(final IntList
src) {
for(ListItem cur = src.first; cur != null;
cur = cur.next)
addLast(cur.item);
}
Слайд 40
![Пример. Классы и интерфейсы. //добавление элемента в конец списка public](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-39.jpg)
Пример. Классы и интерфейсы.
//добавление элемента в конец списка
public void addLast(int item){
ListItem newItem = new ListItem(item, null);
if (last == null){
first = newItem;
} else {
last.next = newItem;
}
last = newItem;
count++;
}
Слайд 41
![Пример. Классы и интерфейсы. //добавление элемента в начало списка public](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-40.jpg)
Пример. Классы и интерфейсы.
//добавление элемента в начало списка
public void addFirst(int item){
ListItem newItem = new ListItem(item,first);
if (first == null){
last = newItem;
}
first = newItem;
count++;
}
Слайд 42
![Пример. Классы и интерфейсы. //удаление первого элемента из списка public](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-41.jpg)
Пример. Классы и интерфейсы.
//удаление первого элемента из списка
public int remove(){
int
res = first.item;
first = first.next;
count--;
return res;
}
Слайд 43
![Пример. Классы и интерфейсы. public interface Visitor { void visit(int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-42.jpg)
Пример. Классы и интерфейсы.
public interface Visitor {
void visit(int item);
}
В
класс IntList добавим метод-итератор:
public void iterator(Visitor visitor){
for (ListItem cur = first; cur!=null; cur = cur.next){
visitor.visit(cur.item);
}
}
Слайд 44
![Интерфейс – тип данных Если тип переменной определен как интерфейс,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-43.jpg)
Интерфейс – тип данных
Если тип переменной определен как интерфейс, то объект,
присвоенный этой переменной, должен быть экземпляром класса, реализующего этот интерфейс.
Продолжаем пример:
Слайд 45
![public class Summator implements Visitor { int sum = 0;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-44.jpg)
public class Summator implements Visitor {
int sum = 0;
String
s ="";
public void visit(int item){
s+=(item+" ");
sum+=item;
}
public int getSum(){return sum;}
public String getList(){return s;}
}
Слайд 46
![Пример. Классы и интерфейсы. public class IntListTest { public static](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-45.jpg)
Пример. Классы и интерфейсы.
public class IntListTest {
public static void main(String[]
args) {
IntList lst = new IntList();
for(int i=0; i<10; i++){
lst.addFirst(2*i);
lst.addLast(20-2*i);
}
System.out.println(lst.getCount());
Summator summator = new Summator();
lst.iterator(summator);
System.out.println(summator.getList());
System.out.println(summator.getSum());
}
}
Слайд 47
![Итак: Интерфейс определяет протокол взаимодействия двух объектов. Объявление интерфейса содержит](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-46.jpg)
Итак:
Интерфейс определяет протокол взаимодействия двух объектов.
Объявление интерфейса содержит сигнатуры методов, но
не их реализации
Объявление интерфейса может содержать определение констант.
Класс, реализующий интерфейс должен реализовывать все методы объявленные в интерфейсе.
Имя интерфейса может использоваться везде, где может использоваться тип данных.
Слайд 48
![Пакет – объединение классов и интерфейсов. объединение родственных классов и](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-47.jpg)
Пакет – объединение классов и интерфейсов.
объединение родственных классов и интерфейсов;
упрощение поиска
классов и интерфейсов, выполняющих определенные функции;
исключение конфликта имен, каждый пакет имеет свое пространство имен;
неограниченный доступ классов и интерфейсов, объединенных в пакет, друг к другу.
Слайд 49
![Использование пакета Создание пакета оператор: package имя_пакета; Обращение к членам](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-48.jpg)
Использование пакета
Создание пакета
оператор:
package имя_пакета;
Обращение к членам пакета из другого пакета
имя_пакета.имя_класса;
(полное имя класса)
import имя-пакета.имя_класса; (импорт класса)
import имя_пакета.*; (импорт целого пакета)
Слайд 50
![Особенности импорта пакетов импорт по умолчанию (java.lang, текущий пакет, безымянный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-49.jpg)
Особенности импорта пакетов
импорт по умолчанию (java.lang, текущий пакет, безымянный пакет);
import имя_пакета.*;
(импорт только классов и интерфейсов данного пакета, но не подпакетов)
import имя_пакета.имя_подпакета.*;
если два импортированных пакета имеют классы с одинаковыми именами, то необходимо использовать полное имя класса;
импорт статических полей и методов.
Слайд 51
![Иерархия пакетов Древовидная структура (иерархия) пакетов и подпакетов в точности](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-50.jpg)
Иерархия пакетов
Древовидная структура (иерархия) пакетов и подпакетов в точности отображается на
структуру файловой системы.
Все файлы с расширением class (содержащие байт-коды), образующие пакет, хранятся в одном каталоге файловой системы.
Подпакеты собраны в подкаталоги этого каталога.
Слайд 52
![Лирика Структура исходного файла с текстом программы на языке Java:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/200357/slide-51.jpg)
Лирика
Структура исходного файла с текстом программы на языке Java:
Необязательный оператор
package.
Необязательные операторы import.
Описания классов и интерфейсов.
Правила:
В файле только один открытый public-класс.
Имя файла совпадает с именем открытого класса.