Примеры описания полей

advertisement



В реальном мире каждый предмет или процесс обладает
набором статических и динамических характеристик
(свойствами и поведением). Поведение объекта зависит от
его состояния и внешних воздействий.
Понятие объекта в программе совпадает с обыденным
смыслом этого слова: объект представляется как
совокупность данных, характеризующих его состояние, и
функций их обработки, моделирующих его поведение.
Вызов функции на выполнение часто называют посылкой
сообщения объекту.
При создании объектно-ориентированной программы
предметная область представляется в виде совокупности
объектов. Выполнение программы состоит в том, что
объекты обмениваются сообщениями.





При представлении реального объекта с помощью
программного необходимо выделить в первом его
существенные особенности и игнорировать
несущественные. Это называется абстрагированием.
Таким образом, программный объект — это абстракция.
Детали реализации объекта скрыты, он используется через
его интерфейс — совокупность правил доступа.
Скрытие деталей реализации называется инкапсуляцией.
Это позволяет представить программу в укрупненном
виде — на уровне объектов и их взаимосвязей, а
следовательно, управлять большим объемом информации.
Итак, объект — это инкапсулированная абстракция с четко
определенным интерфейсом.


Важное
значение
имеет
возможность
многократного
использования
кода.
Для
объекта
можно
определить
наследников, корректирующих или дополняющих его поведение.
Наследование применяется для:
 исключения из программы повторяющихся фрагментов кода;
 упрощения модификации программы;
 упрощения
создания
существующих.


новых
программ
на
основе
Благодаря наследованию появляется возможность использовать
объекты, исходный код которых недоступен, но в которые
требуется внести изменения.
Наследование позволяет создавать иерархии объектов. Иерархия
представляется в виде дерева, в котором более общие объекты
располагаются ближе к корню, а более специализированные — на
ветвях и листьях.



ООП позволяет писать гибкие, расширяемые и читабельные
программы.
Во многом это обеспечивается благодаря полиморфизму,
под которым понимается возможность во время
выполнения программы с помощью одного и того же
имени выполнять разные действия или обращаться к
объектам разного типа.
Чаще всего понятие полиморфизма связывают с
механизмом виртуальных методов.





использование при программировании понятий, близких
к предметной области;
возможность успешно управлять большими объемами
исходного кода благодаря инкапсуляции, то есть
скрытию деталей реализации объектов и упрощению
структуры программы;
возможность многократного использования кода за счет
наследования;
сравнительно
программ;
возможность
объектов.
простая
создания
возможность
и
модификации
использования
библиотек




некоторое снижение быстродействия программы,
связанное с использованием виртуальных методов;
идеи ООП не просты для понимания и в особенности
для практического использования;
для эффективного использования существующих
объектно-ориентированных
систем
требуется
большой объем первоначальных знаний;
неграмотное применение ООП может привести к
значительному
ухудшению
характеристик
разрабатываемой программы.

Классом называется весьма общая сущность,

Свойством (или атрибутом) называется

Методом (или функцией) называется
которая может быть определена как
совокупность элементов.
пропозициональная функция, определенная
на произвольном типе (данных).
операция, определенная над объектами
некоторого класса.





описание класса как типа данных;
объявление объектных переменных
(экземпляров класса, объектов);
создание и инициализация объектов;
выполнение необходимых операций с
объектными переменными в программе;
уничтожение ненужных объектных
переменных
 константы;
 поля;
 методы;
 свойства;
 конструкторы;
 деструкторы;
 индексаторы
(обеспечивают доступ к
элементам класса по их порядковым
номерам);
 обработчики событий.
атрибуты спецификаторы class : список классов-предков
{
Описания констант;
Описания полей;
Описания методов;
Описания свойств;
Описания конструкторов;
Описания деструкторов;
Описания индексаторов;
Описания обработчиков событий
}
Простейший пример описания:
class C1 {} // пустой класс
public
Доступ не ограничен
protected
Доступ только из элементов рассматриваемого класса и его потомков
internal
Доступ только из сборки, в которой находится класс
protected internal Доступ типа protected, но только из элементов рассматриваемого
класса и его потомков, размещённых внутри рассматриваемой
сборки
private
Доступ только для членов класса, доступных в рамках объявляемого
класса
abstract
Абстрактный класс – это класс, на основе которого можно создавать
только классы-наследники, но не объекты
sealed
Бесплодный класс – это класс, на основе которого можно создавать
только объекты, но не классы-наследники
static
Статический класс или его элемент (поле, метод) позволяет
обращаться к нему, не создавая объектов


Методы определяют поведение класса. Каждый метод класса
должен решать только одну задачу.
Создание любого метода следует начинать с его интерфейса
(заголовка). Необходимо четко представлять себе, какие
параметры метод должен получать и какие результаты
формировать. Входные параметры обычно перечисляют в
начале списка параметров.



Поля, характеризующие класс в целом, следует описывать как
статические.
Все литералы, связанные с классом, описываются как поляконстанты с именами, отражающими их смысл.
Необходимо стремиться к максимальному сокращению
области действия каждой переменной. Это упрощает отладку
программы, поскольку ограничивает область поиска ошибки.
атрибуты спецификаторы const тип имя = начальное значение;
Примеры описания констант:
static const int n =0;
double const g =9.81;
Примеры использования констант:
int [] p = new int[n];
y = g*t*t/2.0;
атрибуты спецификаторы тип имя;
Примеры описания полей:
static int r;
public int x;
Пример использования полей:
A.r = b.x;
Спецификатор
Описание
new
public
Новое описание поля, скрывающее унаследованный
элемент класса
Доступ к элементу не ограничен
protected
Доступ только из данного и производных классов
internal
Доступ только из данной сборки
protected internal
private
Доступ только из данного и производных классов и
из данной сборки
Доступ только из данного класса
static
Одно поле для всех экземпляров класса
readonly
Поле доступно только для чтения
volatile
Поле может изменяться другим процессом или
системой
Методы бывают:
 Типизированные;
 Нетипизированные.
Формат описания типизированных методов имеет вид:
Модификатор_доступа тип_результата имя_метода(список
параметров)
{
Объявления переменных
Инструкции
Return выражение
}
Пример описания типизированного метода:
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();

Модификатор_доступа void имя_метода(список параметров)
{
Объявления переменных
Инструкции
}
Пример описания нетипизированного метода:
public void tmax()
{
for (int i = 0; i < 7; i++)
{
if (a[i] > max)
{
max = a[i];
nmax = i;
}
Примеры вызова на исполнение нетипизированного метода:
m.tmax();
В С# четыре типа параметров:

параметры-значения - для исходных данных метода;

параметры-ссылки (ref) - для изменения аргумента;


выходные параметры (out) – для формирования
аргумента;
параметры-массивы (params) – для переменного колва аргументов.
Пример:
public int Calculate( int a, ref int b, out int c, params int[]
d){…}
атрибуты спецификаторы тип Имя_свойства
{
get {код доступа return Имя_свойства;}
set {код доступа;}
}
Пример описания свойства:
int x; // описываем поле x
public int X // описываем свойство X для поля x
{
get { return x; }
set { x = value; }
}
Примеры обращения к полю x объекта a с использованием свойства
X:
a.X = 5;
y = a.X;
Конструктор
–
это
специализированный
метод,
предназначенный для создания и инициализации объектов.
Конструктор
вызывается
на
исполнение
с
помощью
инструкции new и имени класса.
Свойства конструкторов:
 Имя конструктора всегда такое же, как и имя
соответствующего ему класса.


Конструктор, не имеющий параметров, называется
конструктором по умолчанию. При вызове такого
конструктора значимым полям создаваемого объекта
автоматически присваиваются нулевые значения, а ссылочным
полям – значение null.

При выполнении конструктор не возвращает в программу
никаких значений.

Класс может иметь несколько конструкторов с разными
наборами параметров инициализации.
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;
}
}


Деструктор – это специальный вид метода для
высвобождения памяти, занимаемой неиспользуемыми
объектами (уничтожение неиспользуемых объектов).
Отличие в описании деструктора от конструктора состоит в
том, что в деструкторе перед именем класса ставится
значок тильда (~). В теле деструктора обычно описываются
дополнительные действия, выполняемые в ходе удаления
неиспользуемых объектов из памяти.
Пример описания производного
базового класса C1:
класса
C2
на
основе
public class C1
{
Описание элементов класса C1
}
// ----- Описание класса C2 – производного от класса C1.
public class C2 : C1
{
Описание элементов класса C2
}
public class C1
{
public int x1;
public C1( int p1) //Конструктор класса C1
{
this.x1=p;
}
}
// ------- Описание класса C2 – производного от класса C1
public class C2: C1
{
public int x2;
// Конструктор класса C2 вызывает конструктор базового класса C1 base ()
public C2(int p1, int p2): base(p1)
{
this.x2=p2;
}
}
Download