Главная страница

Разработка элементарных программ на языке программирования C#. МУ_ЛБ. Лабораторная работа 1. Разработка элементарных программ на языке программирования C# Цель работы


Скачать 32 Kb.
НазваниеЛабораторная работа 1. Разработка элементарных программ на языке программирования C# Цель работы
АнкорРазработка элементарных программ на языке программирования C
Дата30.08.2022
Размер32 Kb.
Формат файлаdocx
Имя файлаМУ_ЛБ.docx
ТипЛабораторная работа
#656793


Лабораторная работа №1.
Разработка элементарных программ на языке программирования C#

Цель работы

Познакомиться с базовыми особенностями языка программирования C# и разработки программ с использованием среды Visual Studio.
Необходимые теоретические сведения

Краткие сведения о платформе .NET

Платформа .NET Framework определяет среду для поддержки создания и выполнения платформонезависимых гетерогенных приложений. Основными особенностями данной платформы являются не зависящая от языка среда исполнения (Common Language Runtime, CLR) и библиотека классов .NET
Основа языка C#

Обьявление и инициализация переменных:

Тип_переменной имя_переменной [=значение];

Примеры:

int x; //обьявление переменной x

x = 100; //инициализация переменной x

long w, z=100; //обьявление переменных w и z и инициализация z

long q = 100*z; //обьявление переменной с динамической инициализацией
C# – язык со строгим контролем типов данных. Есть 2 основные категории встроенных типов данных в C# – простые типы (типы значений, value types) и ссылочные типы (reference types). Основные простые типы данных в C#:
Таблица 1

Тип

Описание

бит

bool

Значение истина/ложь

1

byte

8-битовое беззнаковое целое

8

char

Символ

16

decimal

Числовой тип для финансовых вычислений

128

double

Число двойной точности с плавающей точкой

64

float

Число с плавающей точкой

32

int

Знаковое целое

32

long

Длинное знаковое целое

64

sbyte

8-битовое знаковое целое

8

short

Короткое целое

16

uint

Беззнаковое целое

32

ulong

Беззнаковое длинное целое

64

ushort

Беззнаковое короткое целое

16


Область видимости переменной в C# – блок кода (заключенный в фигурные скобки {}). Переменная создается при входе в область видимости и уничтожается при выходе из нее.

Основные управляющие операторы

Условный:

if (условие) оператор

[else оператор];
if (условие1) оператор1;

else if (условие2) оператор2;

else if (условие3) оператор3;



Выбора:

switch (выражение){

case константа1:

оператор1;



break;

case константа2:

операторX1;



break;



default:

операторZ1;



break;

}
Цикла:

for(инициализация, условие_выхода, итерация)

оператор;
while (условие_продолжения)

оператор;
do

оператор;

while (условие продолжения);
Пространство имен

Пространство имен определяет область объявления, что позволяет хранить каждый набор имен отдельно от других наборов. В С# имена, объявленные в одном пространстве имен, не конфликтуют с такими же именами, объявленными в другом пространстве имен. Библиотекой .NET Framework (библиотекой С#) используется пространство имен System. Для того, чтобы чтобы сделать видимыми пространства имен без указания полного имени (через ‘.’) используется директива using.
Синтаксис

using имя_пространства_имен;
также возможно использование псевдонимов для имен

using псевдоним = имя;
Пространство имен объявляется с помощью ключевого слова namespace.
Синтаксис

namespace имя

{

члены_пространства_имен

}
Пример программы на C#

Программа ‘Hello, World’ на языке C# выглядит следующим образом:

using System;

namespace MyProgram;

{

class HelloWorld01

{

public static void Main()

{

Console.Write("Hello, World!");

SayHello();

Console.ReadLine();

}
static void SayHello()

{

Console.WriteLine("Hello from *SayHello*");

}

}

}
В методы можно передавать данные в виде аргументов (или параметров). При передаче по значению метод получает не саму переменную, а ее копию. При передаче параметра по ссылке метод получает адрес переменной в памяти. И, таким образом, если в методе изменяется значение параметра, передаваемого по ссылке, то также изменяется и значение переменной, которая передается на его место.
Материалы

  1. https://metanit.com/sharp/tutorial/2.2.php

  2. https://metanit.com/sharp/tutorial/2.27.php



Ход выполнения лабораторной работы

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

  1. Создать переменные различного типа (используя табл.1). Исследовать допустимые значения для присваивания этим переменным. Исследовать возможность использования одних переменных для вычисления значения других. Например:

int p = 5;

double x = 2 * p;

float y = x – 2;

и т.д.

  1. Написать простой цикл с использованием в его теле условного оператора или оператора выбора (например, перебор значений в определенном диапазоне с указанием, является ли число чётным). Используя два других операторы цикла, реализовать аналогичные действия.

  2. Создать простой метод, получающий один или несколько аргументов, значения которых изменяются в теле метода. Метод должен возвращать одно значение при помощи return. Исследовать различие между передачей аргументов в метод по значению и по ссылке (ref, out).

  3. Результаты исследований описать в отчёте и представить его преподавателю для защиты.


Лабораторная работа №2.

Классы и объекты. Инкапсуляция. Полиморфизм и наследование
Цель работы

Познакомиться с основой объектного подхода в языке C#, созданием объектов, классов и механизмом наследования.
Необходимые теоретические сведения

Классы и обьекты

Класс является основой для создания объектов. В классе определяются данные и код, который работает с этими данными. Объекты являются экземплярами класса.

Методы и переменные, составляющие класс, называются членами класса. При определении класса объявляются данные, которые он содержит, и код, работающий с этими данными. Данные содержатся в переменных экземпляра, которые определены классом, а код содержится в методах. В С# определены несколько специфических разновидностей членов класса. Это — переменные экземпляра, статические переменные, константы, методы, конструкторы, деструкторы, индексаторы, события, операторы и свойства.

Непосредственно инициализация переменных в объекте (переменных экземпляра) происходит в конструкторе. В классе могут быть определены несколько конструкторов.
Синтаксис класса

class имя_класса

{

тип_доступа тип имя_переменной1;

тип_доступа тип имя_переменной2;



тип_доступа возвращаемый_тип имя_метода1(список_параметров)

{

тело_метода

}



}
где тип_доступа может быть public, private, protected, internal.
Члены класса с типом доступа public доступны везде за пределами данного класса, с типом доступа protected – внутри членов данного класса и производных, с типом доступа private - только для других членов данного класса. Тип доступа internal применяется для типов, доступных в пределах одной сборки.

Пример:

class Person

{

public string Name;

private int BirthYear;

public int Person (int BY, string N)

{

Name = N;

BirthYear = BY;

}

public int MillenniumAge()

{

return 1999-BirthYear;

}

}


Созданиеобьекта

имя_класса имя_обьекта = new имя_класса();
Пример

Person Ivan = new Person(2000, "Иван");
При создании обьекта класса происходит вызов соответствующего конструктора класса.
Конструктор и деструктор

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

Все классы имеют конструкторы независимо от того, определен он или нет. По умолчанию в С# предусмотрено наличие конструктора, который присваивает нулевые значения всем переменным экземпляра (для переменных обычных типов) и значения null (для переменных ссылочного типа). Но если конструктор явно определен в классе, то конструктор по умолчанию использоваться не будет.
имя_класса (список_параметров)

{

тело_конструктора

}
Деструктор – метод, вызывающийся автоматически при уничтожении обьетка класса (непосредственно перед “сборкой мусора”). Деструктор не имеет параметров и возвращаемого значения.

имя_класса()

{

тело_деструктора

}

Наследование

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

class имя_класса : имя_родительского_класса

{

тело_класса

}
Пример:

class Worker: Person

{

private double Salary;

}
С помощью наследования создается иерархия классов.
Ход выполнения лабораторной работы

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


  1. Создать базовый класс, построить иерархию классов в соответствии с выбранным вариантом задания:

а) Персона, студент, преподаватель, заведующий кафедрой

б) Персона, клиент, сотрудник, инженер

в) Организация, страховая компания, учебное заведение, университет

г) Печатное издание, журнал, книга, учебник

д) Товар, игрушка, пищевой продукт, молочный продукт

е) Транспортное средство, автомобиль, корабль, круизный лайнер

ж) Животное, птица, млекопитающее, парнокопытное

  1. Разработать методы и свойства для каждого из определяемых классов.

  2. Реализовать программу на C# в соответствии с вариантом исполнения. В программе использовать несколько объектов различных типов.

  3. Результаты описать в отчёте и представить его преподавателю для защиты.


Материалы

  1. https://metanit.com/sharp/tutorial/3.1.php

  2. https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/class


Лабораторная работа №3.

Расширенные возможности языка программирования.
Цель работы

Познакомиться с интерфейсами в языке программирования C#
В C# для полного отделения структуры класса от его реализации используется механизм интерфейсов.

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

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

Синтаксис:

[атрибуты] [модификаторы] interface

Имя_интерфейса[:список_родительских_интерфейсов]

{

обьявление_свойств_и_методов

}

Пример:

interface Species

{

string Species();

void Feed();

}

class Cheetah : Animal, Species

{

private string ScientificName;

public string Species()

{ return ScientificName; }

public void Feed()

{ Weight++; }

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

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

Ход выполнения лабораторной работы

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


  1. Расширить классы, реализованные при выполнении лабораторной работы №2, механизмом интерфейсов, добавив в них реализацию одного или двух интерфейсов как реализованных самостоятельно, так и существующих в платформе .NET. Например, из стандартных: возможность клонирования ICloneable или сравнения IComparable и т.п. Из реализованных самостоятельно: возможность подсчёта возраста IAgeable или веса IWeightable и т.п.

  2. Доработать основную программу таким образом, чтобы она демонстрировала возможности использования нового функционала.

  3. Результаты описать в отчёте и представить его преподавателю для защиты.



Лабораторная работа №4.

Событийно-ориентированное программирование
Цель работы

Познакомиться с механизмом делегатов и событий в языке программирования C#
Литература для ознакомления

https://habr.com/ru/post/213809/

https://ru.stackoverflow.com/questions/226505/event-и-delegate-в-чем-отличие

https://habr.com/ru/post/198694/

https://docs.microsoft.com/ru-ru/dotnet/standard/events/
Ход выполнения лабораторной работы

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


  1. Расширить классы, созданные при выполнении лабораторной работы №3, добавив в них реализацию интерфейса IComparable.

  2. Описать generic-класс MyList с методами Add, Insert, Remove, Clear, Sort (в качестве усложнения задания можно реализовать в нём интерфейс IList).

  3. Во всех классах реализовать минимум по одному событию.

  4. Доработать основную программу таким образом, чтобы она демонстрировала возможности использования нового функционала:

    1. Добавление элементов в список (в качестве элементов выбрать один из классов из реализованных в ЛР №3).

    2. Сортировка элементов (в том числе с использованием стороннего компаратора)

    3. Удаление элементов / очистка списка.

    4. Обработку событий.

  5. Результаты описать в отчёте и представить его преподавателю для защиты.


написать администратору сайта