Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Desktop_1 / ЛК / Лекция 12КлассыООП.doc
Скачиваний:
44
Добавлен:
10.06.2015
Размер:
114.69 Кб
Скачать

16.2. Основные принципы ооп

ООП включает в себя 3 основных принципа:

  • Инкапсуляция;

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

  • Полиморфизм.

Инкапсуляция– механизм сокрытия всех внутренних деталей объекта, не влияющих на его внешнее поведение. Это объединение объекта и методов работы с ним (или совмещение данных с методами в одном классе).

Класс приобретает определенную функциональность.

Каждый класс обладает свойствами предка, а способы реализации этого свойства заключены внутри класса.

Эти способы недоступны за пределами класса. Более того, классы ничего не знают друг о друге. Они полностью разделены. Т.о. объект “закрыт” и окружение не может случайно изменить этот объект.

С помощью инкапсуляции данные объекта могут быть защищены от других объектов. Для инкапсуляции характерен принцип сокрытияинформации, что существенно облегчает написание больших и стабильно работающих приложений.

Класс представляет характеристики объекта и выполняемые им действия. Действия обычно специфические для конкретных объектов. Их желательно сделать недоступными для других объектов. Помещение методов в класс «прячет» метод для других объектов.

Например, чтобы представить животное как класс C#, необходимо задать ему размер, скорость движения и силу, представленными в виде чисел, а также некоторые функции, например MoveLeft(), MoveRight(), SpeedUp(), Stop() и так далее, в которых можно написать код для выполнения "животным" этих действий.

В C# класс животного может выглядеть следующим образом.

publicclass:Животное

{

private int Размер;

private float Скорость;

private int Сила;

public void MoveLeft() // Метод сместиться влево

{

// Код здесь...

}

// Другие методы здесь...

}

Методы, свойства и события, а также все остальные внутренние переменные и константы (поля) называются членами класса.

Группировка членов в классы имеет не только логический смысл, она также позволяет скрывать данные и функции, которые должны быть недоступны для другого кода. Этот принцип и есть инкапсуляция.

При просмотре библиотек классов платформы .NET Framework будут видны только открытые члены этих классов. Возможно, каждый класс имеет закрытые члены, используемые внутренне этим классом или связанными классами, которые не предназначены для использования приложениями. Создавая собственные классы, нужно решить, какие члены будут открытыми, а какие — закрытыми.

Класс, наследующий свойства другого класса, обладает теми же возможностями, что и класс, от которого он порожден. Этот принцип называется наследованием.

Наследование– созданиеобъектовпотомков, которые обладают всеми свойствамиобъектовпредков. При наследовании объекты–потомки наследуют свойства объектов-предков и приобретают черты, характерные только для них самих.

Порожденный класс называется потомком, а тот, от которого он порожден –предком.У объекта может быть только один предок, но много потомков.

Объект-потомок наследует все описания и методы объекта–предка. Для него нужно описывать только дополнительныесвойства.

Наследуемые свойства и методы можно использовать в неизменном виде или их переопределять (модифицировать).

Нельзя переопределять данные при наследовании. Данные можно только добавлять. С помощьюнаследованияодни классы объектов могут происходить от других.

Возможно многоуровневое наследование. Механизм наследования позволяет многократно применять программный код, создавая иерархию классов.

Класс может наследовать от другого класса. Это означает, что он включает все члены — открытые и закрытые — исходного класса, а также дополнительные определяемые им члены. Исходный класс называется базовым классом, а новый класс — производным классом. Производный класс создается для представления особых возможностей базового класса.

Наследование ускоряет программирование. Для нового класса нужно программировать только дополнения, которые он имеет.

Синтаксис наследования

КлассПотомок : КлассПредок;

Например, можно определить класс Кошка, который наследует от класса Животное. Класс Кошка может выполнять те же действия, что и класс Животное и дополнительно одно уникальное действие. Код C# выглядит следующим образом.

public class Кошка : Животное

{

public void Дополнительный()

{

// Здесь команды

}

}

Нотация Кошка : Животное означает, что класс Кошка наследует все от класса Животное и что Кошка также имеет метод MoveLeft и три закрытые переменные: Размер, Скорость и Сила. Если затем определяется следующий потомок - класс СиамскаяКошка, который наследует от класса Кошка, то он будет содержать все члены класса Кошка, а также все члены класса Животное. Но будет иметь и что-то свое, свойственное именно Сиамской Кошке.

Полиморфизм– это свойство классов решать схожие по смыслу проблемы разными способами.

Использование для разных объектов методов под одинаковыми именами, но с разным содержанием.

Это свойство, позволяющее одно и тоже имя метода использовать для решения нескольких задач.

Например, щелочек по кнопке Button1Click() может привести к различным действиям: изменению цвета объекта, его формы, появлению записи, и т.п.

Это достигается переопределением родительского метода в классе-потомке. Переопределение позволяет адресовать разным объектам одно и то же сообщение с разным исполнением. Родитель и потомок ведут себя по-разному.

Один и тот же метод выполняется по-разному для различных объектов.

Полиморфизм – возможность использования методов с одинаковым именем, но с разным содержанием.

Полиморфизмом дает возможность производного класса изменять или переопределять методы, которые он наследует от базового класса. Эта функция используется, если в методе, который имеет отличия, не определен в базовом классе, и нужно выполнить какие-то особые действия.

Должно ли быть уникальным имя метода в классе? Нет, этого не требуется. Существование в классе методов с одним и тем же именем называется перегрузкой, а сами одноименные называются перегруженными методы.

Например, мы можем рассчитать площадь треугольника (square) по трем сторонам, по двум сторонам и углу между ними, по стороне и высоте по другим наборам аргументов. Метод имеет общее названиеSquare, а способы реализации, аргументы – разные. МетодSquare– перегружен.

Перегрузка характерна и для законов операции. Например, + знак арифметического сложения, а с другой стороны – операция конкатенации для строковых переменных.

Компилятору известно, какой метод следует использовать, поскольку во время каждого создания объекта предоставляется список аргументов (если таковые имеются). Перегрузка может сделать код более гибким и удобочитаемым.

Например, поскольку метод Животное.MoveLeft должен быть общим, чтобы подходить для всех животных, он является, возможно, очень простым, как например "изменение положения так, чтобы голова животного была в направлении X". Однако для класса Кошка этого может быть недостаточно. Может потребоваться указать, как Кошка двигает лапами и хвостом при поворотах. И если класс Рыба или класс Птица уже определен, возможно, потребуется переопределить метод MoveLeft разными способами для каждого из классов.

Поскольку можно настроить поведение метода MoveLeft для конкретного класса, в коде, создающем класс и вызывающем его методы, отсутствует отдельный метод для каждого животного. Пока объект наследует от класса Животное, вызывающий код может вызывать лишь метод MoveLeft и собственную версию метода объекта.

Соседние файлы в папке ЛК