Классы. Основные понятия

Класс — это тип, создаваемый пользователем. Классы являются основным строительным материалом программ, написанных на языке C#. Если в C++ классы используют только в случае необходимости (их можно и вообще не применять!), то в C# всё построено на классах. Даже простейшая программа типа «Здравствуй, мир!» содержит в себе один класс. Обычно же программы на C# состоят из большого количества пользовательских классов.

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

Понятие класса является основой концепции объектно-ориентированного программирования (ООП).

ООП базируется на трёх основных принципах: инкапсуляция, наследование и полиморфизм.

Инкапсуляция — это объединение под одним общим именем в виде класса данных (их часто называют полями) и методов по обработки этих данных. Вне класса по-умолчанию все поля и методы просто недоступны. Делается это с целью исключения ошибочного изменения полей «чужими» методами.

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

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

Термин полиморфизм переводится как многообразие форм. К элементам полиморфизма можно отнести перегрузку методов, перегрузку операции, использование виртуальных методов.

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

Рассмотрев вкратце основные идеи ООП, далее перейдём к более подробному их изучению. И начнём с главного — как создавать и использовать классы.

Структура класса и порядок его использования

Формально любой класс можно описать таким образом:

атрибуты class имя_класса: предки

{

   члены_класса

}

где

Для того, чтобы использовать разработанный класс, необходимо где-то в программе создать объект этого класса и вызвать его метод:

имя_класса переменная = new имя_класса();

переменная.метод();

Здесь с помощью операции new создаётся объект нашего класса. В скобках как после имени класса, так и после названия метода возможны какие-либо параметры (если это определено в классе).

Вызов метода возможен только с использованием операции доступа (операция «точка». Указываем название переменной, имеющей тип данного класса, затем ставим точку и только потом пишем имя метода с возможными фактическими параметрами.

Пример простого класса

Для большей ясности сразу же рассмотрим пример с небольшим классом.

Пример. Создать класс, моделирующий работу с треугольником (задаются три стороны a, b и c и вычисляется площадь треугольника s).

Возможная реализация программы:

using System;

namespace Prim_Class0

{

   class Treug

   {

      double a, b, c; // стороны треугольника

      

      // метод для ввода данных

      public void vvod()

      {

         Console.Write("a=");

         a = double.Parse(Console.ReadLine());

         Console.Write("b=");

         b = double.Parse(Console.ReadLine());

         Console.Write("c=");

         c = double.Parse(Console.ReadLine());

      }


      // вычисление площади по формуле Герона

      public double Pl()

      {

         double s = 0;

         if (YesTreug())

         {

            double p = (a + b + c) / 2;

            s = Math.Sqrt(p * (p - a) * (p - b) * (p - c));

         }

         else

         {

            Console.WriteLine("Треугольник не существует.");

            s = -1;

         }

         return s;

      }


      // Закрытый метод для проверки существования треугольника

      private bool YesTreug()

      {

         if(a + b > c && a + c > b && b + c > a)

            return true;

         else

            return false;

      }

   }


   class Program

   {

      public static void Main(string[] args)

      {

         Console.WriteLine("Тестирование класса Treug (треугольник)");

         Treug x = new Treug();

         x.vvod();

         double s = x.Pl();

         Console.WriteLine("Площадь треугольника s={0}", s);

         Console.Write("Press any key to continue . . . ");

         Console.ReadKey(true);

      }

   }

}



Результаты работы программы:

Тестирование класса Treug (треугольник)

a=3

b=4

c=5

Площадь треугольника s=6

Press any key to continue . . .



Пояснения к программе.

В данной программе имеется два класса:

  1. Program — основной класс, в котором дано определение метода Main();

  2. Treug — необходим для моделирования работы с объектами типа Треугольник.

В методе Main() класса Program создаётся объект x типа Treug

Treug x = new Treug();

После создания объекта x его поля имеют нулевые значения.

Затем вызывается метод для заполнения полей объекта x необходимыми значениями:

x.vvod();

Далее вычисляется площадь треугольника:

double s = x.Pl();

Теперь рассмотрим содержимое класса Treug

Этот класс содержит три поля a, b, c типа double. Эти поля по-умолчанию являются закрытыми, то есть они доступны только в методах этого класса (для них ни как не указана доступность):

double a, b, c;

Обычно доступность полей прописывается явно, например, в нашем случае можно было бы сделать так:

private double a, b, c;

или дать описание каждого поля по отдельности — это наиболее правильный подход при разработке больших сложных классов:

private double a;

private double b;

private double c;

В классе Treug определены три метода. Приведём их упрощённую запись (только заголовки) и дадим пояснения.

public void vvod() { … } — открытый метод, предназначенный для ввода данных. Метод vvod() не возвращает ни какого результата — об этом говорит ключевое слово void перед именем метода.

public double Pl() { … } — также открытый метод, вычисляющий площадь треугольника. Метод имеет тип результата double. Через имя метода возвращается результат вычислений.

private bool YesTreug() { … } — закрытый метод, определяющий возможность существования треугольника. Возвращает результат булевого типа.

Как видите, методы, необходимые для взаимодействия объекта класса Treug с внешним миром мы сделали открытыми (это методы vvod() и Pl()), а метод YesTreug(), решающий «внутренние проблемы» — закрытым.



Назад
На верх
Вперёд
Hosted by uCoz