Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab8.doc
Скачиваний:
14
Добавлен:
21.09.2019
Размер:
418.82 Кб
Скачать

Пример выполнения варианта №0

Задание 1

Создать абстрактный класс Vehicle (транспортное средство). На его основе реализовать классы Plane (самолет), Car (автомобиль) и Ship (корабль). Классы должны иметь возможность задавать и получать параметры средств передвижения (цена, скорость, и т. п.) с помощью свойств. Для самолета должна быть определена высота, для самолета и корабля – количество пассажиров, для корабля – порт приписки.

Для хранения разработанных классов использовать стандартные параметризованные коллекции. Во всех классах реализовать интерфейс IComparable и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю на усмотрение студента.

Листинг 8.9. – Задание 1

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

namespace lr8

{

abstract class Vehicle: IComparable

{

private int cost;

private string model;

public Vehicle(string model, int cost)

{

this.model = model;

this.cost = cost;

}

public int CompareTo(object obj)

{

string s1 = obj.GetType().Name;

string s2 = ((object)this).GetType().Name;

return string.Compare(s1, s2);

}

public abstract void Passport();

public int Cost

{

get

{

return cost;

}

set

{

cost = value;

}

}

public string Model

{

get

{

return model;

}

set

{

model = value;

}

}

}

class Plane : Vehicle, IComparable

{

private int altitude;

private int capacity;

public Plane(string model, int cost, int altitude, int capacity)

: base(model, cost)

{

this.altitude = altitude;

this.capacity = capacity;

}

public int CompareTo(object obj)

{

string s1 = obj.GetType().Name;

string s2 = ((object)this).GetType().Name;

if (string.Compare(s1, s2) != 0)

return base.CompareTo(obj);

else

{

Plane tmp = (Plane)obj;

if (this.capacity > tmp.capacity)

return 1;

if (this.capacity < tmp.capacity)

return -1;

return 0;

}

}

public override void Passport()

{

Console.WriteLine("Модель {0}, Стоимость = {1}, Высота = {2}, Вместимость = {3}",

this.Model, this.Cost, this.altitude, this.capacity);

}

public int Altitude

{

get

{

return altitude;

}

set

{

altitude = value;

}

}

public int Capacity

{

get

{

return capacity;

}

set

{

capacity = value;

}

}

}

class Car : Vehicle, IComparable

{

private int maxspeed;

public Car(string model, int cost, int maxspeed)

: base(model, cost)

{

this.maxspeed = maxspeed;

}

public int CompareTo(object obj)

{

string s1 = obj.GetType().Name;

string s2 = ((object)this).GetType().Name;

if (string.Compare(s1, s2) != 0)

return base.CompareTo(obj);

else

{

Car tmp = (Car)obj;

if (this.maxspeed > tmp.maxspeed)

return 1;

if (this.maxspeed < tmp.maxspeed)

return -1;

return 0;

}

}

public override void Passport()

{

Console.WriteLine("Модель {0}, Стоимость = {1}, Максимальная Скорость = {2}",

this.Model, this.Cost, this.maxspeed);

}

public int Maxspeed

{

get

{

return maxspeed;

}

set

{

maxspeed = value;

}

}

}

class Ship : Vehicle, IComparable

{

private int capacity;

private string port;

public Ship(string model, int cost, string port, int capacity)

: base(model, cost)

{

this.port = port;

this.capacity = capacity;

}

public int CompareTo(object obj)

{

string s1 = obj.GetType().Name;

string s2 = ((object)this).GetType().Name;

if (string.Compare(s1, s2) != 0)

return base.CompareTo(obj);

else

{

Ship tmp = (Ship)obj;

return string.Compare(this.port, tmp.port);

}

}

public override void Passport()

{

Console.WriteLine("Модель {0}, Стоимость = {1}, Порт {2}, Вместимость = {3}",

this.Model, this.Cost, this.port, this.capacity);

}

public int Capacity

{

get

{

return capacity;

}

set

{

capacity = value;

}

}

public string Port

{

get

{

return port;

}

set

{

port = value;

}

}

}

class Program

{

public static void Main(string[] arg)

{

Console.WriteLine("Лабораторная работа №8. Выполнил студент XXXXX группы XXXXX");

Console.WriteLine("Задание:\nСоздать абстрактный класс Vehicle (транспортное средство). На его основе \nреализовать классы Plane (самолет), Car (автомобиль) и Ship (корабль). \nКлассы должны иметь возможность задавать и получать параметры средств \nпередвижения с помощью свойств. \nДля самолета должна быть определена высота, для самолета и корабля \nколичество пассажиров, для корабля — порт приписки.");

Console.WriteLine("Для хранения использовать параметризированные коллеции");

Console.WriteLine("Во всех класса реализовать интерфейс IComparable");

ArrayList lst = new ArrayList();

lst.Add(new Plane("Plane_Strela", 4000, 40000, 2));

lst.Add(new Ship("Ship_Avrora", 1000, "Marcel", 500));

lst.Add(new Car("Car_Mersedes", 300, 210));

lst.Add(new Ship("Ship_Shlupka", 10, "Ivanovo", 3));

lst.Add(new Car("Car_BMW", 300, 220));

lst.Add(new Car("Car_Jaguar", 900, 350));

lst.Add(new Plane("Plane_Boing", 3000, 30000, 500));

lst.Add(new Ship("Ship_Titanic", 900, "San-Francisco", 3000));

lst.Add(new Plane("Plane_Tu152", 3500, 35000, 350));

for (int i = 0; i < lst.Count; i++)

((Vehicle)lst[i]).Passport();

Console.WriteLine("\n\nОтсортированный массив:");

lst.Sort();

for (int i = 0; i < lst.Count; i++)

((Vehicle)lst[i]).Passport();

}

}

}

Рисунок 8.5 – Результат работы задания 1

В программе создается абстрактный класс и 3 производных от него класса. В качестве примера использования этих классов создается список, а его элементами являются объекты производных классов. Для классов определен интерфейс сравнения. В случае сравнения разных классов, используется сравнение базового класса. В результате мы видим, что в отсортированном списке подряд идут экземпляры одинаковых классов, сравниваются же они по своим индивидуальным полям(Car – максимальная скорость, Plane – вместимость, Ship – имени порта).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]