Классы в С #

27
Классы в С#

Upload: melosa

Post on 14-Jan-2016

81 views

Category:

Documents


0 download

DESCRIPTION

Классы в С #. Понятие объекта. В реальном мире каждый предмет или процесс обладает набором статических и динамических характеристик (свойствами и поведением). Поведение объекта зависит от его состояния и внешних воздействий. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Классы в С #

Классы в С#

Page 2: Классы в С #

В реальном мире каждый предмет или процесс обладает набором статических и динамических характеристик (свойствами и поведением). Поведение объекта зависит от его состояния и внешних воздействий.

Понятие объекта в программе совпадает с обыденным смыслом этого слова: объект представляется как совокупность данных, характеризующих его состояние, и функций их обработки, моделирующих его поведение. Вызов функции на выполнение часто называют посылкой сообщения объекту.

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

Понятие объекта

Page 3: Классы в С #

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

Таким образом, программный объект — это абстракция.

Детали реализации объекта скрыты, он используется через его интерфейс — совокупность правил доступа.

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

Итак, объект — это инкапсулированная абстракция с четко определенным интерфейсом.

Абстрагирование и инкапсуляция

Page 4: Классы в С #

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

Наследование применяется для:

исключения из программы повторяющихся фрагментов кода;

упрощения модификации программы;

упрощения создания новых программ на основе существующих.

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

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

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

Page 5: Классы в С #

ООП позволяет писать гибкие, расширяемые и читабельные программы.

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

Чаще всего понятие полиморфизма связывают с механизмом виртуальных методов.

Полиморфизм

Page 6: Классы в С #

Достоинства ООП

использование при программировании понятий, близких к предметной области;

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

возможность многократного использования кода за счет наследования;

сравнительно простая возможность модификации программ;

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

Page 7: Классы в С #

Недостатки ООП

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

идеи ООП не просты для понимания и в особенности для практического использования;

для эффективного использования существующих объектно-ориентированных систем требуется большой объем первоначальных знаний;

неграмотное применение ООП может привести к значительному ухудшению характеристик разрабатываемой программы.

Page 8: Классы в С #

Основные определения

Классом называется весьма общая сущность, которая может быть определена как совокупность элементов.

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

Методом (или функцией) называется операция, определенная над объектами некоторого класса.

Page 9: Классы в С #

Жизненный цикл класса

описание класса как типа данных;

объявление объектных переменных (экземпляров класса, объектов);

создание и инициализация объектов;

выполнение необходимых операций с объектными переменными в программе;

уничтожение ненужных объектных переменных

Page 10: Классы в С #

Диаграмма класса

Page 11: Классы в С #

константы;поля;методы;свойства;конструкторы;деструкторы;индексаторы (обеспечивают доступ к

элементам класса по их порядковым номерам);

обработчики событий.

Состав класса

Page 12: Классы в С #

атрибуты спецификаторы class : список классов-предков

{

Описания констант;

Описания полей;

Описания методов;

Описания свойств;

Описания конструкторов;

Описания деструкторов;

Описания индексаторов;

Описания обработчиков событий

}

Простейший пример описания: class C1 {} // пустой класс

Формат объявления класса

Page 13: Классы в С #

Примеры спецификаторовpublic Доступ не ограничен

protected Доступ только из элементов рассматриваемого класса и его потомков

internal Доступ только из сборки, в которой находится класс

protected internal Доступ типа protected, но только из элементов рассматриваемого класса и его потомков, размещённых внутри рассматриваемой сборки

private Доступ только для членов класса, доступных в рамках объявляемого класса

abstract Абстрактный класс – это класс, на основе которого можно создавать только классы-наследники, но не объекты

sealed Бесплодный класс – это класс, на основе которого можно создавать только объекты, но не классы-наследники

static Статический класс или его элемент (поле, метод) позволяет обращаться к нему, не создавая объектов

Page 14: Классы в С #

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

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

Поля, характеризующие класс в целом, следует описывать как статические.

Все литералы, связанные с классом, описываются как поля-константы с именами, отражающими их смысл.

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

Элементы класса

Page 15: Классы в С #

атрибуты спецификаторы const тип имя = начальное значение;

 Примеры описания констант: static const int n =0;double const g =9.81; Примеры использования констант: int [] p = new int[n];y = g*t*t/2.0;

Описания констант

Page 16: Классы в С #

  атрибуты спецификаторы тип имя; Примеры описания полей: static int r;public int x; Пример использования полей: A.r = b.x;

Описания полей

Page 17: Классы в С #

  

Спецификаторы полей и констант класса

Спецификатор Описание

new Новое описание поля, скрывающее унаследованный элемент класса

public Доступ к элементу не ограничен

protected Доступ только из данного и производных классов

internal Доступ только из данной сборки

protected internal Доступ только из данного и производных классов и из данной сборки

private Доступ только из данного класса

static Одно поле для всех экземпляров класса

readonly Поле доступно только для чтения

volatile Поле может изменяться другим процессом или системой

Page 18: Классы в С #

Методы бывают: Типизированные; Нетипизированные.

Формат описания типизированных методов имеет вид:

Модификатор_доступа тип_результата имя_метода(список параметров)

{Объявления переменныхИнструкцииReturn выражение}

Описания методов

Page 19: Классы в С #

Пример описания типизированного метода:

public float tsr() { float s = 0; float sr; for (int i = 0; i < 7; i++) { s += Convert.ToSingle(a[i]); } sr = s / 7; return sr; }

Примеры вызова на исполнение типизированного метода: Console.WriteLine("Средняя температура: sr= " + m.tsr()); y = m.tsr();  

Пример описания типизированного метода

Page 20: Классы в С #

Модификатор_доступа void имя_метода(список параметров){Объявления переменныхИнструкции}

Пример описания нетипизированного метода:  public void tmax() { for (int i = 0; i < 7; i++) { if (a[i] > max) { max = a[i]; nmax = i; }

Примеры вызова на исполнение нетипизированного метода:

m.tmax(); 

Формат описания нетипизированных методов

Page 21: Классы в С #

В С# четыре типа параметров:

параметры-значения - для исходных данных метода;

параметры-ссылки (ref) - для изменения аргумента;

выходные параметры (out) – для формирования аргумента;

параметры-массивы (params) – для переменного кол-ва аргументов.

 

Пример:

public int Calculate( int a, ref int b, out int c, params int[] d ) { … }

Типы параметров

Page 22: Классы в С #

атрибуты спецификаторы тип Имя_свойства{get {код доступа return Имя_свойства;}set {код доступа;}}

Пример описания свойства:int x; // описываем поле xpublic int X // описываем свойство X для поля x{ get { return x; } set { x = value; }}Примеры обращения к полю x объекта a с использованием свойства X: a.X = 5;y = a.X;

Свойства

Page 23: Классы в С #

Конструктор – это специализированный метод, предназначенный для создания и инициализации объектов. Конструктор вызывается на исполнение с помощью инструкции new и имени класса.

Свойства конструкторов: Имя конструктора всегда такое же, как и имя

соответствующего ему класса.

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

При выполнении конструктор не возвращает в программу никаких значений.

Класс может иметь несколько конструкторов с разными наборами параметров инициализации.

Конструкторы

Page 24: Классы в С #

using System; using System.Collections.Generic;using System.Text;

class Point // класс Точка {

// ----- поля класса public int x; public int y;

// ------ конструктор класса public Point(int x1, int y1)

{x = x1;y = y1;

}}

Пример конструктора

Page 25: Классы в С #

Деструктор – это специальный вид метода для высвобождения памяти, занимаемой неиспользуемыми объектами (уничтожение неиспользуемых объектов).

Отличие в описании деструктора от конструктора состоит в том, что в деструкторе перед именем класса ставится значок тильда (~). В теле деструктора обычно описываются дополнительные действия, выполняемые в ходе удаления неиспользуемых объектов из памяти.

Деструкторы

Page 26: Классы в С #

Пример описания производного класса C2 на основе базового класса C1:

public class C1{ Описание элементов класса C1}// ----- Описание класса C2 – производного от класса C1.public class C2 : C1{ Описание элементов класса C2}

Производные классы

Page 27: Классы в С #

public class C1{ public int x1; public C1( int p1) //Конструктор класса C1 { this.x1=p; }}// ------- Описание класса C2 – производного от класса C1public class C2: C1 { public int x2;// Конструктор класса C2 вызывает конструктор базового класса C1 base () public C2(int p1, int p2): base(p1) { this.x2=p2; }}

Пример явного вызова конструктора базового класса в конструкторе

производного класса: