КОНСТРУКТОРЫ, ПОЛИМОРФИЗМ И НАСЛЕДОВАНИЕ




Цель лабораторной работы: познакомиться с созданием конструкторов для классов. Изучить механизмы наследования и полиморфизма. Познакомиться с управляющими операторами языка C#.

Теоретические основы

Конструктор – специальный метода объекта, решающий задачу начальной инициализации полей объекта и объявленный следующим образом: для этого метода всегда используется модификатор доступа public, нет типа возвращаемого значения (нет даже void), имя метода совпадает с именем класса.

Пример объявления конструктора в классе MyClass:

public class MyClass

{

int a;

public MyClass(){a=0;} //Конструктор без параметров. Инициализирует поле а нулем

public MyClass(int a){this.a=a;} //Конструктор с параметром типа int.

public MyClass(char a){this.a=a;} //Конструктор с параметром типа char.

}

Реализация для одного класса нескольких конструкторов является примером полиморфизма. Полиморфизм – механизм, позволяющий использовать одно имя для реализации схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. В более общем смысле, в основе полиморфизма лежит идея «использовать один интерфейс для множества методов». Для компилятора полиморфные функции должны различаться принимаемыми параметрами. Это различие может быть по их количеству или по их типам.

Наследование – это процесс, посредством которого один объект может наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование является важным, поскольку оно позволяет поддерживать концепцию иерархии классов (hierarchical classification). Применение иерархии классов делает управляемыми большие потоки информации. Без использования иерархии классов, для каждого объекта пришлось бы задать все характеристики, которые бы исчерпывающи его определяли. Однако при использовании наследования можно описать объект

Dad(int s);

}

public class Son: Dad

{

public Son(int k):base(k) {}

}

Если же у базового класса не объявлено ни одного конструктора (оставлен конструктор по умолчанию) или объявлен конструктор без параметров, тогда конструкцию base можно не использовать: при ее отсутствии управление передается конструктору без параметров.

Однако при вызове конструктора можно передавать управление не только конструктору базового класса, но и другому конструктору данного класса. Это удобно в тех случаях, когда необходимо создать множество объектов, различающихся между собой каким-либо образом, но и имеющим некую общую часть. Тогда для реализации общей части можно написать какой-то общий конструктор, а уже в других конструкторах, выполняющих более детальную настройку объекта, вызывать общий. Передача управления собственному конструктору аналогична описанной выше, только вместо ключевого слова base используется ключевое слово this.

Пример:

public class Dad

{

int a; }

public class Son: Dad

{

public Son(int k):base(k) {}

public Son():this(10) {}

}

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

В данной лабораторной работе необходимо познакомиться со следующими категориями управляющих операторов:

1. Условные операторы. Вводятся ключевыми словами if, if... else..., switch.

2. Циклы. Вводятся ключевыми словами while, do... while, for, foreach.

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

Невозможно построить оператор if... else... на основе одиночного оператора объявления:

if (true) int X = 12;

if (true) int X = 12; else int Z = 1;

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

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

if (true) {int X = 12;}

if (true) {int X = 12;} else {int Z = 0;}

Это правило действует во всех случаях, где какой-то оператор выполняется в зависимости от условия.

Оператор switch имеет вид:

switch(<проверяемая_переменная>)

{

case <констаната_1_значение_переменной>: <оператор>; break;

….

case <констаната_n_значение_переменной>: <оператор>; break;

default: < оператор>break;

}

Пример:

int val;

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

Цикл do... while – цикл с постусловием. Синтаксис:

do Оператор while (УсловиеПродолжения)

Пример:

int i=0;

do

i++;

while(i<=10);

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

Цикл for – пошаговый цикл. Имеет синтаксис:

for([Выражение_Инициализации];[Условие_Продолжения];[Выражение_Шага])

Выражение_Инициализации, Условие_Продолжения, Выражение_Шага в могут быть пустыми, но наличие пары символов ';' в заголовке цикла обязательно.

Пример:

for(int i=0;i<10;i++) Console.WriteLine(i);

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

Цикл forech является универсальным перечислителем для элементов какой-либо коллекции. С ним предлагается познакомиться в следующей лабораторной работе.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: