41713

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

Лабораторная работа

Информатика, кибернетика и программирование

Основные понятия Цель работы: Познакомиться с понятием класса. Продемонстрировать работу с классом создание экземпляра класса изменение значений полей вызов перегруженных методов Выполнить требования к лабораторным работам см. Контрольные вопросы: Что такое метод Что такое возвращаемый тип каким он может быть Что значит void Что такое параметры метода какие параметры бывают Что такое перегрузка методов и для чего она нужна Что такое класс Какие члены класс может содержать Что такое конструктор для чего служит...

Русский

2013-10-24

260.14 KB

1 чел.

Лабораторная работа № 1

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

Цель работы:

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

Задачи:

  1.  Создать класс указанный в задании, содержащий конструктор, поля, перегруженные методы (примеры полей и методов даны в задании, можно создать поля и методы по своему усмотрению).
  2.  Продемонстрировать работу с классом (создание экземпляра класса, изменение значений полей, вызов перегруженных методов)
  3.  Выполнить требования к лабораторным работам (см. файл «Требования к лабораторным»);
  4.  Ознакомиться с литературой по теме лабораторной работы;
  5.  Подготовить ответы на контрольные вопросы.

Контрольные вопросы:

  1.  Что такое метод? Что такое возвращаемый тип, каким он может быть? Что значит void?
  2.  Что такое параметры метода, какие параметры бывают?
  3.  Что такое перегрузка методов и для чего она нужна?
  4.  Что такое класс? Какие члены класс может содержать?
  5.  Что такое конструктор, для чего служит, где вызывается?
  6.  Как создать экземпляр класса, как обратиться к полю класса, как вызвать метод класса?
  7.  Для чего служат модификаторы доступа private, public?
  8.  Для чего нужен тип данных enum?

Пояснения и примеры:

Методы

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

[ атрибуты ] [модификаторы ] возвращаемый_тип имя_метода ( [ параметры ] )

тело_метода

Квадратные скобки показывают, что атрибуты и  модификаторы  могут  быть  опущены  при  описании  метода.  Рассмотрим модификатор доступа, у него четыре возможных  значения, два из них - public  и  private, рассмотрены ниже.

Тип определяет, значение какого типа вычисляется с помощью метода. Часто употребляется термин «метод возвращает значение», поскольку после выполнения метода происходит возврат в то место вызывающей функции, откуда был вызван метод, и передача туда значения выражения, записанного в операторе return. Если метод не возвращает никакого значения, в его заголовке задается тип void, а оператор return отсутствует.

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

Имя метода и список формальных аргументов составляют сигнатуру метода. Заметьте, в

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

Несколько простейших примеров описания методов:

public void A()

{

Console.WriteLine(“A”)

}

int Summa (int a, int b)

{

 Return a + b;

}

Параметры методов

Если параметр метода объявлен без ключевых слов (ref, out, params), то с ним может быть связано значение. Это значение можно изменить в методе, но измененное значение не будет сохранено при возврате управления вызывающей процедуре. Это поведение изменяется с помощью ключевого слова параметра метода.

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

Ключевое слово out используется для передачи аргументов по ссылке. Оно похоже на ключевое слово ref, за исключением того, что ref требует инициализации переменной перед ее передачей. Для работы с параметром out определение метода и вызывающий метод должны явно использовать ключевое слово out. Несмотря на то, что переменные, передаваемые в качестве аргументов out могут не инициализироваться перед передачей, вызывающий метод должен присвоить значение перед возвратом метода.

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

Примеры использования ключевых слов:

class OutExample

{

   static void Method(out int i)

   {

       i = 44;

   }

   static void Main()

   {

       int value;

       Method(out value);  // value =  44

   }

}

class RefExample

{

   static void Method(ref int i)

   {

       i = 44;

   }

   static void Main()

   {

       int val = 0;

       Method(ref val);  // val = 44

   }

}

public class MyClass

{

   public static void UseParams(params int[] list)

   {

       for (int i = 0 ; i < list.Length; i++)

       {

           Console.Write(list[i] + " ");

       }

       Console.WriteLine();

   }

   static void Main()

   {

       UseParams(1, 2, 3, 4);

       int[] myarray = new int[3] {10,11,12};

       UseParams(myarray);

   }

}

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

   1 2 3 4

   10 11 12

Параметры являются необязательными, когда присутствует в объявлении значение по умолчанию. Например, ниже представлен метод, который принимает два параметра: строковый параметр “category” и целочисленный “pageIndex”. Параметр “pageIndex” имеет значение по умолчанию равное 0 и поэтому является необязательным параметром:




Когда вызываете выше приведенный метод, то мы можем передать явно два параметра:


Или же опустить второй необязательный параметр, в данном случае будет передано значение по умолчанию 0:

Перегрузка

Часто бывает удобно, чтобы методы, реализующие один и тот же алгоритм для различных типов данных, имели одно и то же имя.

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

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

// Возвращает наибольшее из двух целых:

int max( int a, int b )

{ … }

// Возвращает наибольшее из трех целых:

int max( int a. int b, int с )

{ … }

// Возвращает наибольшее из первого параметра и длины второго:

i int max ( int a, string b )

{ … }

// Возвращает наибольшее из второго параметра и длины первого:

int max ( string b, int a )

{ … }

Console.WriteLine( max( 1. 2 ) );

Console.WriteLineC max( 1, 2, 3 ) );

Console.WriteLineC max( 1, "2" ) );

Console.WriteLineC max( "1". 2 ) );

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

Классы

Для представления объектов в языках С# используется понятие класс, аналогичное обыденному смыслу этого слова в контексте «класс членистоногих», «класс млекопитающих», «класс задач» и т. п. Класс является обобщенным понятием, определяющим характеристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами класса. Описание класса содержит ключевое слово class, за которым следует его имя, а далее в фигурных скобках — тело класса, то есть список его элементов. Кроме того, для класса можно задать его базовые классы (предки) и ряд необязательных атрибутов и модификаторы, определяющих различные характеристики класса.

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

{

тело_класса

}

В теле класса могут быть объявлены:

  1.  константы;  
  2.  поля;  
  3.  конструкторы и деструкторы;  
  4.  методы;  
  5.  свойства;
  6.  индексаторы;
  7.  операции;
  8.  события;  
  9.  делегаты;  
  10.  классы (структуры, интерфейсы, перечисления)

В данной лабораторной рассмотрим два модификатора доступа, которые могут применяться к классу или его членам:

public (общий, открытый) - доступ к классу или членам класса не ограничен;

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

Если модификатор доступа не указан, по умолчанию используется private.

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

В данном примере класс Person содержит два открытых поля name и surname, два закрытых поля – age и salary. Как к закрытым членам, к ним нельзя получить доступ кроме как через методы членов. Для получения управляемого доступа к закрытым членам можно использовать методы с именем GetAge и GetSalaryТакже в классе есть два открытых конструктора: первый инициализирует поле age, второй – поля name, surname, age.

public class Person

       {

           public string name;

           public string surname;

           private byte age;

           int salary = 0;

           public int GetSalary()

           {

               return salary;

           }

           public byte GetAge()

           {

               return age;

           }

           public void IncreaseSalary(int inc)

           {

               salary += inc;

           }

           public Person(byte age)

           {

               this.age = age;

           }

           public Person(string name, string surname, byte age)

           {

               this.name = name;

               this.surname = surname;

               this.age = age;

           }

       }

       

Создать экземпляр класса можно с помощью операции new, например:

Person employee = new Person(20); // создание экземпляра класса Person

Person director = new Person("Петр", "Петров", 40); // создание другого экземпляра класса Person

Ниже приведен пример работы с классом Person:

static public void WritePersonInf(Person pers)

       {

           Console.WriteLine("Фамилия = {0}, Имя = {1}, Возраст = {2}, Зарплата = {3}", pers.surname, pers.name, pers.GetAge(), pers.GetSalary());

       }

       static void Main(string[] args)

       {

           Person employee = new Person(20);

           Person director = new Person("Петр", "Петров", 40);

           employee.name = "Иван";

           employee.surname = "Иванов";

           WritePersonInf(employee);

           employee.IncreaseSalary(10000);

           WritePersonInf(employee);

           director.IncreaseSalary(20000);

           WritePersonInf(director);

       }

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

Перечисление

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

 enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

В этом перечислении Sat имеет значение 0, Sun — 1, Mon — 2 и т. д. Для переопределения значений по умолчанию перечисления могут иметь инициализаторы. Пример:

 enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

В этом перечислении последовательность элементов принудительно начинается с 1, а не с 0. 

В следующем примере объявляется перечисление Days. Два перечислителя явно преобразуются в целые числа и назначаются целочисленным переменным.

public class EnumTest

{

   enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

   static void Main()

   {

       int x = (int)Days.Sun;

       int y = (int)Days.Fri;

       Console.WriteLine("Sun = {0}", x);

       Console.WriteLine("Fri = {0}", y);

   }

}

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

  Sun = 0

  Fri = 5

В этом следующем объявляется перечисление Military_rank. У класса Battler присутствует поле перечисляемого типа. Экземпляру класса Battler приставивается перечислитель?

namespace ConsoleApplicationl 

{

 enum Military_rank { Рядовой, Сержант,  Майор,  Генерал };  

 class Battler

{

 public string surname;

 public Military_rank rank;

}

class Classl

{

 static void Main()

 {

  Battler х;

  x.surname = "Иванов";

  x.rank = Military_rank.Sergeant;

  Console.WriteLine( х.rank + " " + х.surname);

 }

}

}

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

Сержант Иванов

Литература:

  1.  c# для школьников 16 – 45 стр.;
  2.  Павловская Т.А. С#. Программирование на языке высокого уровня. Глава 5. Классы: основные понятия 100 – 120 стр., Перечисления 215 стр.;
  3.  C# - лекции IntUit (Биллиг В.А.).  9. Лекция: Процедуры и функции - методы класса, 16. Лекция: Классы

Я использовала

http://habrahabr.ru/blogs/net/91221/


 

А также другие работы, которые могут Вас заинтересовать

81515. Биосинтез ДНК, субстраты, источники энергии, матрица, ферменты. Понятие о репликативном комплексе. Этапы репликации 154.76 KB
  Этапы биосинтеза ДНК. Предложен ряд моделей механизма биосинтеза ДНК с участием указанных ранее ферментов и белковых факторов однако детали некоторых этапов этого синтеза еще не выяснены. Основываясь главным образом на данных полученных в опытах in vitro предполагают что условно механизм синтеза ДНК у Е.
81516. Синтез ДНК и фазы клеточного деления. Роль циклинов и циклинзависимых протеиназ в продвижении клетки по клеточному циклу 163.63 KB
  Роль циклинов и циклинзависимых протеиназ в продвижении клетки по клеточному циклу. Все фазы клеточного цикла G1 S G2 M могут различаться по длительности но в особенности это касается фазы G1 длительность которой может быть равна практически нулю или быть столь продолжительной что может казаться будто клетки вообще прекратили деление. В этом случае говорят что клетки находятся в состоянии покоя фаза G0. Клетки эпителия кишечника делятся на протяжении всей жизни человека но даже у этих быстропролиферирующих клеток подготовка к...
81517. Повреждение и репарация ДНК. Ферменты ДНК-репарирующего комплекса 137.99 KB
  Ферменты ДНКрепарирующего комплекса. Процесс позволяющий живым организмам восстанавливать повреждения возникающие в ДНК называют репарацией. Все репарационные механизмы основаны на том что ДНК двухцепочечная молекула т.
81518. Биосинтез РНК. РНК полимеразы. Понятие о мозаичной структуре генов, первичном транскрипте, посттранскрипционном процессинге 108.48 KB
  РНК полимеразы. В ходе процесса образуются молекулы мРНК служащие матрицей для синтеза белков а также транспортные рибосомальные и другие виды молекул РНК выполняющие структурные адапторные и каталитические функции Транскрипция у эукариотов происходит в ядре.принцип комплементарного спаривания оснований в молекуле РНК G ≡ C =U и Т=А.
81519. Биологический код, понятия, свойства кода, коллинеарность, сигналы терминации 105.17 KB
  Генетический код и его свойства Необходимость кодирования структуры белков в линейной последовательности нуклеотидов мРНК и ДНК продиктована тем что в ходе трансляции: нет соответствия между числом мономеров в матрице мРНК и продукте синтезируемом белке; отсутствует структурное сходство между мономерами РНК и белка. Отсюда становится ясным что должен существовать словарь позволяющий выяснить какая последовательность нуклеотидов мРНК обеспечивает включение в белок аминокислот в заданной последовательности. Он позволяет шифровать...
81520. Роль транспортных РНК в биосинтезе белков. Биосинтез аминоацил-т-РНК. Субстратная специфичность аминоацил-т-РНК-синтетаз 125.71 KB
  У человека около 50 различных тРНК обеспечивают включение аминокислот в белок. тРНК называют адапторные молекулы так как к акцепторному концу этих молекул может быть присоединена определённая аминокислота а с помощью антикодона они узнают специфический кодон на мРНК. В процессе синтеза белка на рибосоме связывание антикодонов тРНК с кодонами мРНК происходит по принципу комплементарности и антипараллельности.
81521. Последовательность событий на рибосоме при сборке полипептидной цепи. Функционирование полирибосом. Посттрансляционный процессинг белков 111.26 KB
  Каждая эукариотическая мРНК кодирует строение только одной полипептидной цепи т. она моноцистронна в отличие от прокариотических мРНК которые часто содержат информацию о нескольких пептидах т. Кроме того на полицистронных мРНК синтез белка начинается до того как заканчивается их собственный синтез так как процессы транскрипции и трансляции не разделены.
81522. Адаптивная регуляция генов у про- и эукариотов. Теория оперона. Функционирование оперонов 127.06 KB
  Регуляция активности генов у прокариотов. В экспериментах гипотеза оперона получила полное подтверждение а предложенный в ней тип регуляции стали называть контролем синтеза белка на уровне транскрипции так как в этом случае изменение скорости синтеза белков осуществляется за счёт изменения скорости транскрипции генов т. Согласно теории Жакоба и Моно оперонами называют участки молекулы ДНК которые содержат информацию о группе функционально взаимосвязанных структурных белков и регуляторную зону контролирующую транскрипцию этих генов.
81523. Понятие о клеточной дифференцировке. Изменение белкового состава клеток при дифференцировке (на примере белкового состава полипептидных цепей гемоглобина) 105.05 KB
  Дифференцировка клеток определенного типа сводится к экспрессии в них комплекса генов специфичных для данной клеточной линии. Экспрессия этих генов в свою очередь контролируется регуляторными районами гена промоторами и энхансерами. Энхансеры регуляторные районы ДНК расположенные на некотором расстоянии от контролируемых ими генов но в том же локусе хромосомы. Для того чтобы промоторы и энхансеры тканеспецифических генов могли взаимодействовать с ТФ они должны быть открытыми т.