Помощь в написании студенческих работ
Антистрессовый сервис

Наследование классов. 
Программирование. 
Базовый курс с#

РефератПомощь в написанииУзнать стоимостьмоей работы

Открытые члены базового класса доступны для членов и объектов производного класса. В нашем примере класс Point имеет два открытых свойства (X и Y), которыми можно пользоваться как внутри класса Circle, так и во «внешнем мире», обращаясь к этим свойствам с помощью ссылок на объекты класса circle. В методе display (), а также в аксессорах свойства Center производного класса выполняется… Читать ещё >

Наследование классов. Программирование. Базовый курс с# (реферат, курсовая, диплом, контрольная)

Наиболее богатым в отношении повторного использования кода и полиморфизма является отношение наследования классов. Для него используют название «является» (is-a). При наследовании объект производного класса служит частным случаем или специализацией объекта базового класса. Например, велосипед является частным случаем транспортного средства. Не проводя сравнительного анализа всех тонкостей возможных отношений между классами (этим нужно заниматься в специальном курсе, посвященном объектно-ориентированной методологии, см., например, [2]), покажем на примере рассматриваемых классов «точка на плоскости» и «окружность с заданным точкой центром», как реализуется наследование в языке С#. Итак, класс Point будет базовым классом, а класс Circle сделаем его наследником, иначе говоря, производным от него.

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

модификаторыopt class.

имя_производного_класса: имя_базового_класса

{операторы_тела_производного_класса}

Конструкция «: имя_базового_класса» в стандарте C# называется спецификацией базы класса.

Таким образом, класс Circle как производный от базового класса Point, можно определить таким образом (программа 1304.cs): class Circle: Point // класс «окружность на плоскости»

{ П Закрытое поле:

double rad; // радиус окружности II свойство для радиуса окружности: public double Rad {.

get { return rad; } set { rad = value; }.

}

// свойство для значения длины окружности:

public double Len { get { return 2 * rad * Math. PI; } }.

// свойство для центра окружности: public Point Centre {.

get.

{

Point temp = new PointQ; temp. X = X; temp. Y = Y; return temp;

}

set { X = value. X; Y = value. Y; }.

}

public void display ().

{

Console.WriteLine («Centre: X={0}, Y={1}; «.

+ «Radius={2}, Length={3,6:f2}» ,.

X, Y, rad, Len);

>

}

По сравнению с предыдущими примерами класс Point не изменился. Он так же содержит два закрытых поля, задающих координаты точки, и два открытых свойства X, Y, обеспечивающих доступ к этим полям. В классе Point конструктор добавлен компилятором. В производном классе Circle явно определены: вещественное поле rad, три уже рассмотренных свойства Rad, Len Centre и метод display (). Явного определения конструктора нет и в классе Circle. Поэтому объекты класса Circle можно создавать только с используемыми по умолчанию значениями полей.

При наследовании производный класс «получает в наследство» все члены (поля, свойства, индексаторы и методы) базового класса, за исключением конструктора — конструктор базового класса не наследуется. Получив от базового класса его члены, базовый класс может по-разному «распорядиться с наследством». Доступ к полям базового класса для членов и объектов производного класса разрешен не всегда. Закрытые члены базового класса недоступны для членов и объектов производного класса.

Открытые члены базового класса доступны для членов и объектов производного класса. В нашем примере класс Point имеет два открытых свойства (X и Y), которыми можно пользоваться как внутри класса Circle, так и во «внешнем мире», обращаясь к этим свойствам с помощью ссылок на объекты класса circle. В методе display (), а также в аксессорах свойства Center производного класса выполняется непосредственное обращение к унаследованным свойствам X, Y.

Особое внимание в нашем примере с наследованием нужно обратить на свойство Circle.Centre. При агрегации и композиции классов Point и Circle значением этого свойства служит ссылка на непосредственно существующий объект класса Point. В случае наследования в объекте класса Circle нет объекта класса Point — наследуются поля и свойства класса Point. Поэтому для объявления в классе Circle свойства Centre объект класса Point приходится «реконструировать»:

public Point Centre.

{

get.

{

Point temp = new PointQ; temp. X = X; temp. Y = Y; return temp;

}

set {X = value. X; Y = value. Y;}.

}

В get-аксессоре явно создается временный объект класса Point, его полям с помощью унаследованных свойств присваиваются значения полей, унаследованных классом Circle от базового класса Point. Ссылка на этот временный объект возвращается как значение свойства Circle.Centre. Set-аксессор свойства Circle. Centre очень прост — непосредственно используются унаследованные свойства X, Y класса Point.

Следующий фрагмент программы (см. 1304.cs) демонстрирует возможности класса Circle.

class Program.

{

static void MainQ.

{

Circle rim = new Circle ();

rim.X = 24;

rim.Y = 10;

rim.Rad = 2;

rim.display ();

rim = new Circle ();

rim.display ();

} }

В методе Main () создан объект класса Circle. Он ассоциирован со ссылкой rim, и с ее помощью осуществляется доступ как к свойствам и методам объекта класса Circle, так и к свойствам объекта базового класса Point, созданного в аксессоре get свойства Circle.Centre. Следующие результаты выполнения программы дополняют приведенные объяснения:

Centre: Х=24, Y=10; Radius=2, Length=12,57.

Centre: X=0, Y=0; Radius=0j Length=0,00.

В языке UML предусмотрено специальное обозначение для отношения наследования классов. Два класса (рис. 13.3) изображаются на диаграмме отдельными прямоугольниками, которые соединены сплошной линией со стрелкой на одном конце. Стрелка направлена на базовый класс.

Диаграмма к программе 13_04.cs с наследованием классов.

Рис. 13.4. Диаграмма к программе 1304.cs с наследованием классов

Показать весь текст
Заполнить форму текущей работой