Наслідування. Створення та використання ієрархії класів

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    163,2 Кб
  • Опубликовано:
    2013-11-18
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Наслідування. Створення та використання ієрархії класів

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Національний університет "Львівська політехніка"

Інститут післядипломної освіти








ЗВІТ

Про виконання лабораторної роботи

з дисципліни «Об’єктно-орієнтоване програмування»

«Наслідування. Створення та використання ієрархії класів»


Виконав:

слухач групи ПЗС-11

Гринчук Тарас

Прийняла:

доц. Кортєєва Т.О.



Львів 2014

1. Завдання


Розробити ієрархію класів згідно отриманого завдання та описати їх алгоритмічною мовою С++. Використати абстрактні класи і віртуальні функції. Написати фрагмент програми з використанням об’єктів створених класових типів.

Варіант 5. Побутові прилади: пральна машина, пилосос, телевізор, магнітофон, радіоприймач, музичний центр.

2. Структурна схема ієрархії класів


Рис. 2.1. Структурна схема ієрархії класів

3. Текст програми на мові програмування Java

/**

* Л/р №3 (варіант 5)

* Наслідування. Створення та використання ієрархії класів.

* @author Taras

*/lab3_oop;java.util.*;

/* --------------------------------------------------------------------------

* клас Лічильник електроенергії - підраховує к-сть використаних кВт*год

* при роботі електропристроїв, в залежності від часу роботи

* та їх потужності.

* Клас має лише один екземпляр і створюється "на вимогу", реалізовано на базі

* патерна Одинак (Singleton)

*/ElectricityCounter {static ElectricityCounter value() {ec;

}

//збільшення лічильникаvoid add(double kilowatts, double hours) {+= kilowatts * hours;

}

//показати поточний станdouble indicate() {kilowattHours;

}double kilowattHours = 0;

//приватний конструктор, екземпляр створюється тільки через статичний викликElectricityCounter() {}static ElectricityCounter ec = new ElectricityCounter();

}

/* --------------------------------------------------------------------------

* клас Мотор - входить у склад кожного Побутового пристрою

*/Engine {

//потужністьdouble power;

//конструкторEngine(double power) {.power = power;

}

//запускvoid start() {.out.println("Start engine...");

}

//припинення роботиvoid stop() {.out.print("Stop engine.");

}

}

/* --------------------------------------------------------------------------

* абстрактний клас Побутових пристроїв - батьківський для всіх інших

*/class Appliance {

//поля-характеристикиString type; //типString manufacturer; //виробникString model; //модельEngine eng; //мотор

//конструкторAppliance(double power, String type, String manufacturer, String model) {= new Engine(power);.type = type;.manufacturer = manufacturer;.model = model;

}

//перевизначення стандартного методу Object.toString() - використовуємо

//для виведення на екран назви об'єкту з його характеристиками

@OverrideString toString() {type + ": " + manufacturer + " " + model + " / " + eng.power + " kWt";

}

//запуск пристроюvoid start() {.start();

}

//вимкнення пристроюvoid stop(double hours) {.stop();.out.println(" Time of work: " + hours + " hours.");.value().add(eng.power, hours);

}

//абстрактний (віртуальний) метод. Реалізований для кожного виду

//побутового пристрою по-різномуvoid work();

}

/* -------------------------------------------------------------------------

* клас Сервісні прилади - дочірній до Побутових пристроїв

* використовується для розширення інтерфейсу батьківського класу

*/class ServiceEquipment extends Appliance {

//конструкторServiceEquipment(double power, String type, String manufacturer, String model) {

//виклик конструктора батьківського класу(power, type, manufacturer, model);

//"Очистка приладу після роботи"

//абстрактний (віртуальний) метод, для кожного конкретного виду

//сервісної техніки, передбачено своя реалізація цього методуvoid CleanItself();

}

/* --------------------------------------------------------------------------

* клас Інформаційна(розважальна) техніка - дочірній до Побутових пристроїв

* використовується для розширення інтерфейсу батьківського класу

*/class Informational Technics extends Appliance {

//рівень звукуint volumeLevel;

//конструкторInformational Technics(double power, String type, String manufacturer, String model) {

//виклик конструктора батьківського класу(power, type, manufacturer, model);

//початкове значення рівня звуку= 10;

}

//встановлення рівня звукуvoid setVolumeLevel(int volumeLevel) {.volumeLevel = volumeLevel;

}

}

/* --------------------------------------------------------------------------

* клас Пральна машина - дочірній до Сервісних приладів

*/WashingMachine extends ServiceEquipment {

//місткість баку з водоюint waterTankCapacity;

//конструкторWashingMachine(double power, String manufacturer, String model, int waterTankCapacity) {

//виклик конструктора батьківського класу(power, "Washing machine", manufacturer, model);.waterTankCapacity = waterTankCapacity;

}

//до батьківського представлення назви додамо ще місткість баку

@OverrideString toString() {super.toString() + " / " + waterTankCapacity + " Liters";

}

//пранняvoid wash() {.out.println("Washing...");

}

//викручуванняvoid squeeze() {.out.println("Squeezing...");

}

//реалізація віртуального методу класу Побутових пристроїв

@Overridevoid work() {();();

}

//реалізація віртуального методу класу Сервісних приладів

@Overridevoid CleanItself() {

//очистка баку з водою.out.println("Cleaning water from the tank.");

}

}

/* --------------------------------------------------------------------------

* клас Пилосос - дочірній до Сервісних приладів

*/VacuumCleaner extends ServiceEquipment{

//довжина шлангуint cordLength;

//конструкторVacuumCleaner(double power, String manufacturer, String model, int cordLength) {

//виклик конструктора батьківського класу(power, "Vacuum cleaner", manufacturer, model);.cordLength = cordLength;

}

//до батьківського представлення назви додамо ще довжину шлангу

@OverrideString toString() {super.toString() + " / " + cordLength + " meters";

}

//метод "пилососити"void clean() {.out.println("Cleaning...");

}

//реалізація віртуального методу класу Побутових пристроїв

@Overridevoid work() {();

}

//реалізація віртуального методу класу Сервісних приладів

@Overridevoid CleanItself() {

//очистити мішок з сміттям.out.println("Cleaning garbage collector.");

}

}

/* --------------------------------------------------------------------------

* клас Радіо - дочірній до Інформаційної техніки

*/Radio extends InformationalTechnics {

//діапазон хвильString frequencyRange;

//конструкторRadio(double power, String manufacturer, String model, String frequencyRange) {

//виклик конструктора батьківського класу(power, "Radio", manufacturer, model);.frequencyRange = frequencyRange;

}

//до батьківського представлення назви додамо ще діапазон хвиль

@OverrideString toString() {super.toString() + " / " + frequencyRange;

}

//програвати радіохвилюvoid playRadio() {.out.println("Playing radio...");

}

@Overridevoid work() {();

}

}

/* --------------------------------------------------------------------------

* клас Телевізор - дочірній до Інформаційної техніки

*/TV extends InformationalTechnics {

//довжина діагоналі в дюймахint diagonal;

//конструкторTV(double power, String manufacturer, String model, int diagonal) {

//виклик конструктора батьківського класу(power, "TV-set", manufacturer, model);.diagonal = diagonal;

}

//до батьківського представлення назви додамо ще довжину діагоналі

@OverrideString toString() {super.toString() + " / " + diagonal + " inch";

}

//показати телеканалvoid playTV() {.out.println("Playing TV channel...");

}

//телетекстvoid displayTeleText() {.out.println("Displaying teletext...");

}

//реалізація віртуального методу класу Побутових пристроїв

@Overridevoid work() {();();

}

}

/* --------------------------------------------------------------------------

* клас Магнітофон - дочірній до Радіо

*/TapeRecorder extends Radio {

//кількість касетниківint cassetteNumber;

//конструкторTapeRecorder(double power, String manufacturer, String model,String frequencyRange, int cassetteNumber) {

//виклик конструктора батьківського класу(power, manufacturer, model, frequencyRange);

//переприсвоїмо тип на потрібний= "Tape recorder";.cassetteNumber = cassetteNumber;

}

//до батьківського представлення назви додамо ще кількість касетників

@OverrideString toString() {super.toString() + " / " + cassetteNumber + " tape(s)";

}

//програвати запис на касетіvoid playTapes() {.out.println("Playing tapes...");

}

//реалізація віртуального методу класу Побутових пристроїв

@Overridevoid work() {

//спочатку запустимо батьківський функціонал.work();();

}

}

/* --------------------------------------------------------------------------

* клас Музичний центр - дочірній до Магнітофон

*/StereoSystem extends TapeRecorder {

//кількість слотів для дисківint cdNumber;

//конструкторStereoSystem(double power, String manufacturer, String model, String frequencyRange, int cassetteNumber,cdNumber) {

//виклик конструктора батьківського класу(power, manufacturer, model, frequencyRange, cassetteNumber);

//переприсвоїмо тип на потрібний= "Stereo system";.cdNumber = cdNumber;

}

//до батьківського представлення назви додамо ще кількість СD-слотів

@OverrideString toString() {super.toString() + " / " + cdNumber + " cd's";

}

//програвати CD-дискvoid playCD() {.out.println("Playing cd's...");

}

//реалізація віртуального методу класу Побутових пристроїв

@Overridevoid work() {

//спочатку запустимо батьківський функціонал.work();();

}

}

/* ===================================================

* головний клас пакету

*/class Lab3_OOP {static void main(String[] args) {

//Створення масиву Побутових пристроїв[] app = {WashingMachine(0.95, "Bosch", "WAB 20071 CE", 42),VacuumCleaner(0.25, "Philips", "FC 9174", 9),Radio(0.01, "LG", "SP820", "AM+FM"),TV(0.1, "Sony", "KDL-42W807", 42),TapeRecorder(0.05, "Pioneer", "BDP-150", "FM", 2),StereoSystem(0.12, "Sharp", "GX-M10HOR", "AM+FM", 1, 4)

};

//отримання випадкових значень для вказання часу роботи пристроївc = Calendar.getInstance();rand = new Random(c.getTimeInMillis());

//обхід масиву пристроїв(Appliance a : app) {.out.println("=====================================");.out.println(a);

//включимо пристрій.start();

//протестуємо весь функціонал пристрою.work();

//зупиняємо

//після проходження випадкової к-сті годин в рамках доби.stop(rand.nextInt(24) + 1);

//якщо пристрій належить до гілки Сервісних,

//очистимо його після роботи(a instanceof ServiceEquipment)

//виведемо поточний стан індикатора лічильника електроенергії.out.println("----------------------------------------");.out.println("Electricity counter: "

+ ElectricityCounter.value().indicate() + " kWt*hrs");

}

}

}

4. Результат виконання програми

ієрархія клас побутовий програмування

Запустимо програму на виконання (рис. 4.1).

В результаті бачимо протокол роботи різних електричних пристроїв і збільшення показника електролічильника відсортовані, внаслідок цього.

Рис. 4.1. Результат виконання програми

5.   Висновки


На даній лабораторній роботі я навчився створювати ієрархічні структури класів, використовувати наслідування для написання ефективних програм на Java. Також вивчив особливості роботи з абстрактними класами та функціями, застосовуванню поліморфізму у прикладних задачах.

Похожие работы на - Наслідування. Створення та використання ієрархії класів

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!