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

Проектування ієрархії класів побутових приладів (пральна машина, пилосос, телевізор, магнітофон, радіоприймач, музичний центр), створення її структурної схеми. Розробка програми з використанням об'єктів створених класових типів на мові програмування Java.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык украинский
Дата добавления 25.01.2014
Размер файла 451,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

ЗВІТ

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

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

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

Виконав:

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

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

Прийняла:

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

Львів 2014

1. Завдання

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

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

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

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

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

/**

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

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

* @author Taras

*/

package lab3_oop;

import java.util.*;

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

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

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

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

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

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

*/

class ElectricityCounter {

public static ElectricityCounter value() {

return ec;

}

//збільшення лічильника

public void add(double kilowatts, double hours) {

kilowattHours += kilowatts * hours;

}

//показати поточний стан

public double indicate() {

return kilowattHours;

}

private double kilowattHours = 0;

//приватний конструктор, екземпляр створюється тільки через статичний виклик

private ElectricityCounter() {}

private static ElectricityCounter ec = new ElectricityCounter();

}

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

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

*/

class Engine {

//потужність

public double power;

//конструктор

public Engine(double power) {

this.power = power;

}

//запуск

public void start() {

System.out.println("Start engine...");

}

//припинення роботи

public void stop() {

System.out.print("Stop engine.");

}

}

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

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

*/

abstract class Appliance {

//поля-характеристики

protected String type; //тип

private String manufacturer; //виробник

private String model; //модель

private Engine eng; //мотор

//конструктор

public Appliance(double power, String type, String manufacturer, String model) {

eng = new Engine(power);

this.type = type;

this.manufacturer = manufacturer;

this.model = model;

}

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

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

@Override

public String toString() {

return type + ": " + manufacturer + " " + model + " / " + eng.power + " kWt";

}

//запуск пристрою

public void start() {

eng.start();

}

//вимкнення пристрою

public void stop(double hours) {

eng.stop();

System.out.println(" Time of work: " + hours + " hours.");

ElectricityCounter.value().add(eng.power, hours);

}

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

//побутового пристрою по-різному

abstract void work();

}

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

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

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

*/

abstract class ServiceEquipment extends Appliance {

//конструктор

public ServiceEquipment(double power, String type, String manufacturer, String model) {

//виклик конструктора батьківського класу

super(power, type, manufacturer, model);

}

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

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

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

abstract void CleanItself();

}

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

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

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

*/

abstract class Informational Technics extends Appliance {

//рівень звуку

private int volumeLevel;

//конструктор

public Informational Technics(double power, String type, String manufacturer, String model) {

//виклик конструктора батьківського класу

super(power, type, manufacturer, model);

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

volumeLevel = 10;

}

//встановлення рівня звуку

public void setVolumeLevel(int volumeLevel) {

this.volumeLevel = volumeLevel;

}

}

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

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

*/

class WashingMachine extends ServiceEquipment {

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

private int waterTankCapacity;

//конструктор

public WashingMachine(double power, String manufacturer, String model, int waterTankCapacity) {

//виклик конструктора батьківського класу

super(power, "Washing machine", manufacturer, model);

this.waterTankCapacity = waterTankCapacity;

}

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

@Override

public String toString() {

return super.toString() + " / " + waterTankCapacity + " Liters";

}

//прання

public void wash() {

System.out.println("Washing...");

}

//викручування

public void squeeze() {

System.out.println("Squeezing...");

}

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

@Override

public void work() {

wash();

squeeze();

}

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

@Override

public void CleanItself() {

//очистка баку з водою

System.out.println("Cleaning water from the tank.");

}

}

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

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

*/

class VacuumCleaner extends ServiceEquipment{

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

private int cordLength;

//конструктор

public VacuumCleaner(double power, String manufacturer, String model, int cordLength) {

//виклик конструктора батьківського класу

super(power, "Vacuum cleaner", manufacturer, model);

this.cordLength = cordLength;

}

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

@Override

public String toString() {

return super.toString() + " / " + cordLength + " meters";

}

//метод "пилососити"

public void clean() {

System.out.println("Cleaning...");

}

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

@Override

public void work() {

clean();

}

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

@Override

public void CleanItself() {

//очистити мішок з сміттям

System.out.println("Cleaning garbage collector.");

}

}

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

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

*/

class Radio extends InformationalTechnics {

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

private String frequencyRange;

//конструктор

public Radio(double power, String manufacturer, String model, String frequencyRange) {

//виклик конструктора батьківського класу

super(power, "Radio", manufacturer, model);

this.frequencyRange = frequencyRange;

}

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

@Override

public String toString() {

return super.toString() + " / " + frequencyRange;

}

//програвати радіохвилю

public void playRadio() {

System.out.println("Playing radio...");

}

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

@Override

public void work() {

playRadio();

}

}

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

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

*/

class TV extends InformationalTechnics {

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

private int diagonal;

//конструктор

public TV(double power, String manufacturer, String model, int diagonal) {

//виклик конструктора батьківського класу

super(power, "TV-set", manufacturer, model);

this.diagonal = diagonal;

}

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

@Override

public String toString() {

return super.toString() + " / " + diagonal + " inch";

}

//показати телеканал

public void playTV() {

System.out.println("Playing TV channel...");

}

//телетекст

public void displayTeleText() {

System.out.println("Displaying teletext...");

}

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

@Override

public void work() {

playTV();

displayTeleText();

}

}

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

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

*/

class TapeRecorder extends Radio {

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

private int cassetteNumber;

//конструктор

public TapeRecorder(double power, String manufacturer, String model,String frequencyRange, int cassetteNumber) {

//виклик конструктора батьківського класу

super(power, manufacturer, model, frequencyRange);

//переприсвоїмо тип на потрібний

type = "Tape recorder";

this.cassetteNumber = cassetteNumber;

}

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

@Override

public String toString() {

return super.toString() + " / " + cassetteNumber + " tape(s)";

}

//програвати запис на касеті

public void playTapes() {

System.out.println("Playing tapes...");

}

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

@Override

public void work() {

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

super.work();

playTapes();

}

}

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

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

*/

class StereoSystem extends TapeRecorder {

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

private int cdNumber;

//конструктор

public StereoSystem(double power, String manufacturer, String model, String frequencyRange, int cassetteNumber,

int cdNumber) {

//виклик конструктора батьківського класу

super(power, manufacturer, model, frequencyRange, cassetteNumber);

//переприсвоїмо тип на потрібний

type = "Stereo system";

this.cdNumber = cdNumber;

}

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

@Override

public String toString() {

return super.toString() + " / " + cdNumber + " cd's";

}

//програвати CD-диск

public void playCD() {

System.out.println("Playing cd's...");

}

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

@Override

public void work() {

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

super.work();

playCD();

}

}

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

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

*/

public class Lab3_OOP {

public static void main(String[] args) {

//Створення масиву Побутових пристроїв

Appliance[] app = {

new WashingMachine(0.95, "Bosch", "WAB 20071 CE", 42),

new VacuumCleaner(0.25, "Philips", "FC 9174", 9),

new Radio(0.01, "LG", "SP820", "AM+FM"),

new TV(0.1, "Sony", "KDL-42W807", 42),

new TapeRecorder(0.05, "Pioneer", "BDP-150", "FM", 2),

new StereoSystem(0.12, "Sharp", "GX-M10HOR", "AM+FM", 1, 4)

};

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

Calendar c = Calendar.getInstance();

Random rand = new Random(c.getTimeInMillis());

//обхід масиву пристроїв

for(Appliance a : app) {

System.out.println("=====================================");

System.out.println(a);

//включимо пристрій

a.start();

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

a.work();

//зупиняємо

//після проходження випадкової к-сті годин в рамках доби

a.stop(rand.nextInt(24) + 1);

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

//очистимо його після роботи

if(a instanceof ServiceEquipment)

((ServiceEquipment) a).CleanItself();

//виведемо поточний стан індикатора лічильника електроенергії

System.out.println("----------------------------------------");

System.out.println("Electricity counter: "

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

}

}

}

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

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

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

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

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

5. Висновки

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

Размещено на Allbest.ru


Подобные документы

  • Характеристика і функції телефонних довідників. Визначення об'єктів і класів і залежностей (зв'язків) між ними. Побудова діаграми ієрархії класів. Реалізація програми в середовищі Borland Delphi. Її інтерфейс і демонстрація можливостей. Тестовий приклад.

    курсовая работа [349,3 K], добавлен 25.01.2016

  • Загальна характеристика та особливості програмування сучасних систем автоматизованого проектування. Порівняльна характеристика середовищ розробки прикладних програм на мові JAVA. Ознайомлення з принципами і особливостями роботи певних класів, компонентів.

    курсовая работа [2,0 M], добавлен 31.01.2014

  • Створення діаграм: варіантів використання, взаємодії, класів, станів та компонентів. Генерування коду на основі створених діаграм за допомогою StarUML на об'єктно-орієнтовній мові програмування Java. Головне вікно програми "Цифровий диктофон", лістинг.

    отчет по практике [1,9 M], добавлен 21.12.2015

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

    курсовая работа [211,3 K], добавлен 19.08.2010

  • Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.

    курсовая работа [98,0 K], добавлен 06.05.2014

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

    курсовая работа [69,4 K], добавлен 14.03.2013

  • Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

    курсовая работа [104,4 K], добавлен 14.03.2013

  • Ключові поняття мови об’єктно-орієнтованого програмування C++: інкапсуляція, наслідування, абстракція, поліморфізм. Об’ява класів у мові С++. Графічні засоби. Пошук відстані між точками. Опис класів і об’єктів. Програма графічної задачі. Лістинги файлів.

    курсовая работа [144,3 K], добавлен 14.03.2013

  • Розробка кросплатформового інструменту електронного тестування учнів молодших та середніх класів по іноземній мові. Вибір середовища розробки та системи контролю версій. Опис мови програмування Java та лістинг програми. Апаратні та програмні вимоги.

    дипломная работа [608,3 K], добавлен 26.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.