Наслідування. Створення та використання ієрархії класів
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет "Львівська політехніка"
Інститут післядипломної освіти
ЗВІТ
Про виконання лабораторної роботи
з дисципліни «Обєктно-орієнтоване програмування»
«Наслідування. Створення та використання ієрархії класів»
Виконав:
слухач групи ПЗС-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)
((ServiceEquipment) a).CleanItself();
//виведемо поточний стан індикатора лічильника електроенергії.out.println("----------------------------------------");.out.println("Electricity counter: "
+ ElectricityCounter.value().indicate() + " kWt*hrs");
}
}
}
4. Результат виконання програми
ієрархія клас побутовий програмування
Запустимо програму на виконання (рис. 4.1).
В результаті бачимо протокол роботи різних електричних пристроїв і збільшення показника електролічильника відсортовані, внаслідок цього.
Рис. 4.1. Результат виконання програми
5.Висновки
На даній лабораторній роботі я навчився створювати ієрархічні структури класів, використовувати наслідування для написання ефективних програм на Java. Також вивчив особливості роботи з абстрактними класами та функціями, застосовуванню поліморфізму у прикладних задачах.
Больше работ по теме:
Предмет: Информационное обеспечение, программирование
Тип работы: Практическое задание
Новости образования
КОНТАКТНЫЙ EMAIL: [email protected]
Скачать реферат © 2018 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ