Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП(для очников).doc
Скачиваний:
37
Добавлен:
26.03.2016
Размер:
191.49 Кб
Скачать

Описание классов, создание объектов и основы ооп

Класс– шаблон, по которому создаются объекты (экземпляры). Класс описывает данные (личные и глобальные переменные или поля) и методы, модифицирующие данные. Все методы реализуются в виде функций, однако, стоит отметить, что существуют специализированные функции, которые ничего не возвращают (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по умолчанию могут быть переопределены все методы (если это не запрещено для конкретного метода или класса). Для этого необходимо чтобы метод потомка совпадал по имени и параметрам с методом предка. Для совместного использования необходимы различия в сигнатурах методов (параметрах, их типах и порядке следования).