по дисциплине «Алгоритмизация и программирование»




ОТЧЕТ

По лабораторной работе

по дисциплине «Алгоритмизация и программирование»

 

Студент: А.С.Блинков

 

Группа НМт-263907

 

Преподаватель:

профессор, д.т.н. И.А.Гурин

 

 

Екатеринбург

Практическая работа «Введение в ООП и.NETFramework»

1. Создать консольное приложение C#.

2. Вычислить числа Фибоначчи, используя (по вариантам):

Вариант 3.ЦиклDo-while с 1 до 10

classProgram

{

staticvoid Main(string[] args)

{

int a = 1;

int b = 0;

int sum = 0;

intnumber = 1;

Console.WriteLine("Программа выводит числа Фибоначчи от 1 до 10");

do

{

if (number > 10)

{

break;

}

sum = a + b;

Console.Write("{0} ", sum);

a = b;

b = sum;

number++;

}

while (number >= sum);

Console.ReadKey();

}

}

 

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

Продемонстрировать работу (через создание объектов).

 

В данной работе я использовал 1 базовый класс – Автомобили и 2 подкласса- Легковые автомобили и Грузовые автомобили.

 

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

После двоеточия указываем базовый класс для данного класса. Для классов Passege и Trucks базовым является Car, и поэтому классы классыPassege и Trucks наследует все те же свойства, методы, поля, которые есть в классе Car. Единственное, что не передается при наследовании, это конструкторы базового класса.

classTrucks:Car

classPasseger:Car

С помощью ключевого слова base можно обратиться к базовому классу. В конструкторе класса Passege надо установить марку, вес, модель, год выпуска и количество пассажирских мест, а в классе Trucks надо установить марку, вес, модель, год выпуска, мощность двигателя и значение грузоподъемности. Но марку, модель, вес, и год передаем на установку в конструктор базового класса, то есть в конструктор класса Car, с помощью выражения

: base(_marka, _model, _Year, _weight).

 

В классе Passege и Trucks через ключевое слово base надо явным образом вызвать конструктор класса Car:

Для Passege:

public intnumber_seats{ get; set; }

public Passeger(string _marka, string _model, int _Year, int _weight, intnumb_seats)

: base(_marka, _model, _Year, _weight)

{

number_seats = numb_seats;

}

Для Trucks:

public Trucks(string _marka, string _model, int _Year, int _weight, inteng_power, intlift_capacity)

: base(_marka, _model, _Year, _weight)

{

lifting_capacity = lift_capacity;

engine_power = eng_power;

}

При создании производного класса надо учитывать тип доступа к базовому классу - тип доступа к производному классу должен быть таким же, как и у базового класса, или более строгим. То есть, если базовый класс у нас имеет тип доступа internal, то производный класс может иметь тип доступа internal или private, но не public.

· Инкапсуляция:

Применение модификаторов доступа типа private защищает переменную от внешнего доступа.

privateintyear;

 

Инкапсуляция применяется для ограничения доступа к переменной year и сокрытию ее внутри класса.

privateintyear;

publicint Year

{

set

{

if (value< 0)

{

Console.WriteLine("Некорректныйгодвыпуска!\n");

}

else

{

year = value;

}

}

get

{

return year;

}

}

· Полиморфизм:

Полиморфизм предполагает определение полиморфного интерфейса в базовом классе - набор членов класса, которые могут быть переопределены в классе-наследнике.

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

В данной лабораторной работе, для наглядности, я использовал 3 различных метода:

1. Обычное наследование всех членов базового класса в классе-наследнике

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

 

publicvirtualvoidInfoCarVirtual()

{

Console.WriteLine("Марка автомобиля: " + marka + "\n" + "Модель автомобиля: " + model + "\n" + "Вес автомобиля: " + weight + "\n" + "Год выпуска автомобиля: " + Year + "\n");

}

Car avto2 = newCar("Toyota", "Land Cruiser 200", 2015, 2555);

avto2.InfoCarVirtual();

Passegeravto = newPasseger("BMW", "X6M", 2017, 2150, 5);

avto.InfoCarVirtual();

В данном случае будут выведены данные:

"Toyota", "LandCruiser 200", 2015, 2555

"BMW", "X6M", 2017, 2150

Число 5 в экземпляре avto выведено не будет.

 

2. Переопределение членов базового класса в классе-наследнике

Я считаю, что самым оптимальным способом переопределения в данной работе, является именно этот способ:

Переопределение методов базового класса в классе-наследнике предполагает использование ключевого слова override:

publicoverridevoidInfoCarVirtual()

{

Console.WriteLine("Марка автомобиля: " + marka + "\n" + "Модель автомобиля: " + model + "\n" + "Вес автомобиля: " + weight + "\n" + "Год выпуска автомобиля: " + Year + "\n" + "В автомобиле: " + number_seats + " пассажирских мест\n");

}

Напримереэкземпляров:

Car avto2 = newCar("Toyota", "Land Cruiser 200", 2015, 2555);

avto2.InfoCarVirtual();

Passegeravto = newPasseger("BMW", "X6M", 2017, 2150, 5);

avto.InfoCarVirtual();

 

Будут выведены все значения, а именно:

"Toyota", "Land Cruiser 200", 2015, 2555

"BMW", "X6M", 2017, 2150, 5

Число 5 будет выведено, в отличии от предыдущего метода.

3. Скрытие членов базового класса в классе-наследнике

Можно определить в классе-наследнике метод с тем же именем, добавив в определение ключевое слово new.

В данном случае будем скрывать значения в avto3, а именно значения 180 и 2000.

 

Car avto3 = newTrucks("Iveco EuroTrakker", "AD 720 T", 2009, 9000, 180, 2000); //180 и 2000 показанонебудет

avto3.InfoCarVirtual();

Trucks avto4 = newTrucks("Volvo", "FL", 2017, 12000, 240, 6000); //240 и 6000 будетпоказано

avto4.InfoCarVirtual();

 

Нужно заметить, что в экземпляре, в отличии от других 2 способов по разные стороны “=” записаны разные классы, а именно Car и Trucks (Caravto3 = newTrucks)

 

publicnewvoidInfoCarVirtual()

{

Console.WriteLine("Маркаавтомобиля: " + marka + "\n" + "Модельавтомобиля: " + model + "\n" + "Весавтомобиля: " + weight + "\n" + "Годвыпускаавтомобиля: " + Year + "\n" + "Мощностьдвигателя: " + engine_power + "\n" + "Грузоподъемность: " + lifting_capacity + "\n");

}

Полный код программы:

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

 

namespace ConsoleApp34

{

classCar

{

publicstringmarka{ get; set; }

publicstring model { get; set; }

publicint weight { get; set; }

privateint year;

publicint Year

{

set

{

if (value< 0)

{

Console.WriteLine("Некорректный год выпуска!\n");

}

else

{

year = value;

}

}

get

{

return year;

}

}

publicCar(string _marka, string _model, int _weight, int _Year)

{

marka = _marka;

weight = _weight;

model = _model;

Year = _Year;

}

//Методы, которые мы хотим сделать доступными для переопределения, в базовом классе помечается модификатором virtual

publicvirtualvoidInfoCarVirtual()

{

Console.WriteLine("Марка автомобиля: " + marka + "\n" + "Модель автомобиля: " + model + "\n" + "Вес автомобиля: " + weight + "\n" + "Год выпуска автомобиля: " + Year + "\n");

}

}

classPasseger:Car

{

 

publicintnumber_seats{ get; set; }

publicPasseger(string _marka, string _model, int _Year, int _weight, intnumb_seats)

: base(_marka, _model, _Year, _weight)

{

number_seats = numb_seats;

}

 

//Переопределение методов базового класса в классе-наследнике при помощи override

publicoverridevoidInfoCarVirtual()

{

Console.WriteLine("Марка автомобиля: " + marka + "\n" + "Модель автомобиля: " + model + "\n" + "Вес автомобиля: " + weight + "\n" + "Год выпуска автомобиля: " + Year + "\n" + "В автомобиле: " + number_seats + " пассажирских мест\n");

}

}

classTrucks:Car

{

publicintlifting_capacity{ get; set; }

publicintengine_power{ get; set; }

publicTrucks(string _marka, string _model, int _Year, int _weight, inteng_power, intlift_capacity)

: base(_marka, _model, _Year, _weight)

{

lifting_capacity = lift_capacity;

engine_power = eng_power;

}

 

//Переопределение методов базового класса в классе-наследнике при помощи new

//Чтобы явно скрыть метод из базового класса, используется ключевое слово new

publicnewvoidInfoCarVirtual()

{

Console.WriteLine("Марка автомобиля: " + marka + "\n" + "Модель автомобиля: " + model + "\n" + "Вес автомобиля: " + weight + "\n" + "Год выпуска автомобиля: " + Year + "\n" + "Мощность двигателя: " + engine_power + "\n" + "Грузоподъемность: " + lifting_capacity + "\n");

}

}

 

classProgram

{

staticvoid Main(string[] args)

{

//Переопределение методов базового класса в классе-наследнике при помощи override:

Car avto2 = newCar("Toyota", "Land Cruiser 200", 2015, 2555);

avto2.InfoCarVirtual();

Console.WriteLine("Легковыемашины: \n");

Passegeravto = newPasseger("BMW", "X6M", 2017, 2150, 5);

avto.InfoCarVirtual();

 

//Переопределение методов базового класса в классе-наследнике при помощи new:

//В этом случае метод InfoCarVirtual() в Trucks скрывает метод InfoCarVirtual() из класса Car

//Разница в объявлении экземпляра

Console.WriteLine("Грузовые машины:\n");

Car avto3 = newTrucks("Iveco EuroTrakker", "AD 720 T", 2009, 9000, 180, 2000); //180 и 2000 показанонебудет

avto3.InfoCarVirtual();

Trucks avto4 = newTrucks("Volvo", "FL", 2017, 12000, 240, 6000); //240 и 6000 будетпоказано

avto4.InfoCarVirtual();

Console.ReadKey();

}

}

}



Поделиться:




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

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


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