- •Объектно-ориентированное программирование Содержание
- •Теоретическая часть.
- •Практическая часть.
- •Пример выполнения задания.
- •Листинг.
- •Индивидуальные задания
- •Методические указания по выполнению практических заданий.
- •Основы языкаjava
- •Описание классов, создание объектов и основы ооп
- •Пакетыjava
- •Обработка исключений (exceptions)
- •IllegalArgumentException
- •IndexOutOfBoundsException
- •Некоторые объекты стандартных пакетовjava.Langиjava.Util.
- •Организация ввода/вывода
- •Список рекомендуемой литературы:
Описание классов, создание объектов и основы ооп
Класс– шаблон, по которому создаются объекты (экземпляры). Класс описывает данные (личные и глобальные переменные или поля) и методы, модифицирующие данные. Все методы реализуются в виде функций, однако, стоит отметить, что существуют специализированные функции, которые ничего не возвращают (void), которые аналогичны процедурам в других языках.
Внутри объекта данные и методы могут обладать различной степенью видимости (доступности) через использование модификаторов доступа (public,private,protected). Это позволяет организовать защиту, как данных, так и методов от внешнего вмешательства или неправильного использования. Объявление класса описывается следующей схемой:
[модификаторы класса] class <имя класса>
[extends <имя класса предка> и/или
implements <одно или несколько имен интерфейсов>]
{
//описание полей и методов
}
Каждое поле класса описывается оператором вида:
[модификатор] тип <имя поля>[[]] [=<выражение> или {перечень через запятую значений элементов массива}];
Каждый метод имеет описание вида:
[модификатор] <тип возврата> <имя метода>
([перечень типов и имен формальных параметров,
возможно, с квадратными скобками ])
{ //тело метода
}
модификатором является одно из следующих слов:
public видимость метода/переменной – полная
protected видимость метода/переменной – класс и его подклассы
private видимость метода/переменной – класс
static является методом/переменной класса, а не экземпляра
Метод подкласса переопределяет метод суперкласса только в том случае, если и подкласс и суперкласс имеют метод с одинаковым именем, типом и списком параметров.
Наследование – это процесс, посредством которого, один объект может приобретать свойства и поведение другого, а также добавлять к ним черты, характерные только для него через ввод в логическую структуру объекта (в класс) новых переменных или новых методов, а также через переопределение методов базового (родительского) класса. Наследование позволяет организовать иерархию классов.
В языке Javaвсе классы произошли от одного суперклассаObjectи реализовано только одиночное наследование классов:
class <имя класса2> extended <имя класса1> {
// тело класса
}
Предположим, что Вы собираетесь определить класс, который выступал бы в качестве родительского для других классов, но хотите, чтобы пользователь не мог создавать экземпляр этого класса. Для решения этой задачи в Javaпредусмотрен механизм интерфейсов.
Интерфейс описывает полный набор методов класса, но без их реализации. Каждый класс сам определяет детали реализации этих методов. Реализовать интерфейс может любое число классов, и один класс может реализовать любое число интерфейсов.
interface <имя интерфейса> {
// список методов и констант
}
Реализация интерфейса выполняется через создание класса.
[модификатор] class <имя класса> implements <имя интерфейса1>, <имя интерфейса2>, … {
/*
Реализация методов, описанных в интерфейсе.
Методы, которые реализуют интерфейс, должны быть объявлены как public
*/
}
Конструктор– специальный метод, используемый для создания объекта.
Назначение конструктора – инициализация экземпляра в момент его создания (определение его начального внутреннего состояния). Имя конструктора всегда совпадает с именем класса, в котором он расположен (аналогично C++). У конструкторов нет типа возвращаемого результата. Например:
class Point {
int х, у;
Point(int х, int у){ //этот метод является конструктором
this.x = х;
this.у = у; }
}
Создание объекта заданного класса осуществляется с помощью операции new, которая создает объект и возвращает ссылку на него:
<Имя класса> <Имя переменной> =
new <Имя класса> (<Список параметров>);
Например:
class PointCreate {
public static void main(String args[]) {
Point p = new Point(10,20);
System.out.println("x = " + p.x + " у = " + p.у);
}
}
В классе могут существовать несколько конструкторов, которые различным образом осуществляют инициализацию переменных класса. Конструкторы отличаются друг от друга сигнатурой, то есть числом параметров, их типом и последовательностью их указания в параметрах конструктора, например:
class Point {
int х, у;
Point(int х, int у) {
this.x = х;
this.у = у; }
Point() { х = -1; у = -1; }
}
Если в классе отсутствует конструктор, то при создании объекта используется «конструктор по умолчанию», который обнуляет поля класса.
Полиморфизмв ООП означает возможность применения одноименных методов с одинаковыми или различными наборами параметров в одном классе или в группе классов, связанных отношением наследования.
Понятие полиморфизма, в свою очередь, опирается на два других понятия: совместное использование (overloading) и переопределение (overriding).
Под совместным использованием понимают использование одноименных методов с различным набором параметров. При вызове метода в зависимости от набора параметров выбирается требуемый метод. Это статическийполиморфизм методов.
При переопределении (overriding) методов речь идет только о паре классов — предке и потомке. В классе-потомке определяется метод полностью идентичный как по имени, так и по набору параметров тому, что есть в классе-предке.
В Javaв отличие отObjectPascalпо умолчанию могут быть переопределены все методы (если это не запрещено для конкретного метода или класса). Для этого необходимо чтобы метод потомка совпадал по имени и параметрам с методом предка. Для совместного использования необходимы различия в сигнатурах методов (параметрах, их типах и порядке следования).