DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт з лабораторної роботи №4 з дисципліни Кросплатформні засоби програмування

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2026
Тип роботи:
Лабораторна робота
Предмет:
Кросплатформенні засоби програмування
Група:
КІ 43
Коротко про документ

Про що ця робота

У звіті з лабораторної роботи розглядаються принципи спадкування та інтерфейсів у мові програмування Java. Наведено практичну реалізацію програми для об’єктно-орієнтованого моделювання ноутбука.

У роботі розглядаються

  • Спадкування в Java
  • Інтерфейси
  • Об'єктно-орієнтоване програмування
  • Абстрактні класи
  • Пакет Java
  • Розробка програмного забезпечення

Зміст і розділи

  1. Теоретичні відомості
  2. Спадкування
  3. Інтерфейси
  4. Хід роботи
  5. Код програми
  6. Висновок
Для кого:Студенти технічних спеціальностей, викладачі та розробники, які вивчають об'єктно-орієнтоване програмування на мові Java.
Викладачі:Миц А.М.

Ключові поняття

спадкуванняінтерфейссуперкласпідкласJavaабстрактний класпакетметодоб'єктклас

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ Звіт З лабораторної роботи №4 З дисципліни: «Кросплатформні засоби програмування» На тему: «Спадкування та інтерфейси» Прийняв: Миц А.М. Львів 2018 Мета роботи: Ознайомитися з спадкуванням та інтерфейсами у мові Java. ТЕОРЕТИЧНІ ВІДОМОСТІ Спадкування Спадкування в ООП призначене для розширення функціональності існуючих класів шляхом утворення нових класів на базі вже існуючих. У Java реалізована однокоренева архітектура класів згідно якої всі класи мають єдиного спільного предка (кореневий клас в ієрархії класів) – клас Object. Решта класів мови Java утворюються шляхом успадковування даного класу. Будь-яке спадкування у мові Java є відкритим, при цьому аналогів захищеному і приватному спадкуванню мови С++ не існує. На відміну від С++ у Java можливе спадкування лише одного базового класу (множинне спадкування відсутнє). Спадкування реалізується шляхом вказування ключового слова class піcля якого вказується назва підкласу, ключове слово extends та назва суперкласу, що розширюється у новому підкласі. Синтаксис реалізації спадкування: class Підклас extends Суперклас { Додаткові поля і методи } В термінах мови Java базовий клас найчастіше називається суперкласом, а похідний клас – підкласом. Дана термінологія запозичена з теорії множин, де підмножина міститься у супермножині. При наслідувані у Java дозволяється перевизначення (перевантаження) методів та полів. При цьому область видимості методу, що перевизначається, має бути не меншою, ніж область видимості цього методу у суперкласі, інакше компілятор видасть повідомлення, про обмеження привілеїв доступу до даних. Перевизначення методу полягає у визначені у підкласі методу з сигнатурою методу суперкласу. При виклику такого методу з-під об’єкта підкласу викличеться метод цього підкласу. Якщо ж у підкласі немає визначеного методу, що викликається, то викличеться метод суперкласу. Якщо ж у суперкласі даний метод також відсутній, то згенерується повідомлення про помилку. Перевизначення у підкласах елементів суперкласів (полів або методів) призводить до їх приховування новими елементами. Бувають ситуації, коли у методах підкласу необхідно звернутися до цих прихованих елементів суперкласів. У цій ситуації слід використати ключове слово super, яке вказує, що елемент до якого йде звернення, розташовується у суперкласі, а не у підкласі. Синтаксис звертання до елементів суперкласу: super.назваМетоду([параметри]); // виклик методу суперкласу super.назваПоля // звертання до поля суперкласу Використання ключового слова super у конструкторах підкласів має дещо інший сенс, ніж у методах. Тут воно застосовується для виклику конструктора суперкласу. Виклик конструктора суперкласу має бути першим оператором конструктора підкласу. Конкретний конструктор, який необхідно викликати, вибирається по переданим параметрам. Явний виклик конструктора суперкласу часто є необхідним, оскільки підкласи не мають доступу до приватних полів суперкласів. Тож ініціалізація їх полів значеннями відмінними від значень за замовчуванням без явного виклику відповідного конструктора суперкласу є неможливою. Якщо виклик конструктора суперкласу не вказаний явно у підкласі або суперклас не має конструкторів, тоді автоматично викликається конструктор за замовчуванням суперкласу. Синтаксис виклику конструктора суперкласу з конструктора підкласу: public НазваПідкласу([параметри]) { super([параметри]); оператори конструктора підкласу } Інтерфейси Інтерфейси вказують що повинен робити клас не вказуючи як саме він це повинен робити. Інтерфейси покликані компенсувати відсутність множинного спадкування у мові Java та гарантують визначення у класах оголошених у собі прототипів методів. Синтаксис оголошення інтерфейсів: [public] interface НазваІнтерфейсу { Прототипи методів та оголошення констант інтерфейсу } Інтерфейси можуть містити прототипи методів, які мають визначатися у класі, що відповідає цьому інтерфейсу, і константи, які автоматично успадковуються класом, що реалізує цей інтерфейс. Всі методи інтерфейсу вважаються загальнодоступними, тому оголошувати методи як public у інтерфейсі нема необхідності. Всі поля, що оголошені у інтерфейсі автоматично вважаються такими, що оголошені як public static final, тому додавати ці модифікатори самостійно необхідності також нема. Інтерфейси можуть успадковувати інші інтерфейси, утворюючи таким чином ієрархії інтерфейсів. Синтаксис реалізації спадкування у інтерфейсів співпадає з синтаксисом реалізації спадкування у класах. Оскільки інтерфейс не є класом, то створити його об’єкт за допомогою оператора new неможливо. Проте можна оголосити посилання на інтерфейсний тип та присвоїти цьому посиланню об’єкт, що реалізує цей інтерфейс. На відміну від спадкування клас може реалізувати кілька інтерфейсів. Ця особливість і компенсує відсутність множинного спадкування у мові Java. Щоб клас реалізував інтерфейс необхідно: 1. Оголосити за допомогою ключового слова implements, що клас реалізує інтерфейс. Якщо клас реалізує кілька інтерфейсів, то вони перелічуються через кому після ключового слова implements. 2. Визначити у класі усі методи, що вказані у інтерфейсі. Хід роботи: Завдання: 1. Написати та налагодити програму на мові Java, що розширює клас, що реалізований у лабораторній роботі No3, для реалізації предметної області заданої варіантом. Суперклас, що реалізований у лабораторній роботі No3, зробити абстрактним. Розроблений підклас має забезпечувати механізми свого коректного функціонування та реалізовувати мінімум один інтерфейс. Програма має розміщуватися в пакеті Група.Прізвище.Lab4 та володіти коментарями, які дозволять автоматично згенерувати документацію до розробленого пакету. 2. Автоматично згенерувати документацію до розробленого пакету. Варіант: 7) Ноутбук Код програми: Абстрактний класс Computer package KI43.[ім’я автора приховано].Lab3; import java.io.*; abstract public class Computer { private double usingProcessorSpeed = 3.1; private double freeMemory = 1000; private boolean workOrNot = false; FileWriter fw; public Computer() { System.out.println("Nice to meet you again!"); try { fw = new FileWriter("logs.txt"); fw.write("User activated the computer.\n"); fw.close(); } catch (IOException e) { e.printStackTrace();} } public Computer(double speed, double size) { usingProcessorSpeed = speed; freeMemory = size; try { fw = new FileWriter("logs.txt", true); fw.write("User activated the computer, with input data: " + freeMemory + " - initial free memory, " + usingProcessorSpeed + " - initial speed of the processor.\n" ); fw.close(); } catch (IOException e) { e.printStackTrace();} } public void setFreeMemory(double size) { freeMemory=size; System.out.println("New free memory: " + freeMemory); try { fw = new FileWriter("logs.txt", true); fw.write("New free memory: " + freeMemory + "\n"); fw.close(); } catch (IOException e) { e.printStackTrace(); } } public void setNewProcessorSpeed(double speed) { usingProcessorSpeed = speed; System.out.println("New processor speed: " + usingProcessorSpeed); try { fw = new FileWriter("logs.txt", true); fw.write("New processor speed: " + usingProcessorSpeed + "\n"); fw.close(); } catch (IOException e) { e.printStackTrace();} } public double getFreeMemory() { try { fw = new FileWriter("logs.txt", true); fw.write("Computer get information about, how many free memory are at him.\n"); fw.close(); } catch (IOException e) { e.printStackTrace(); } return freeMemory; } public double getProcessorSpeed() { try { fw = new FileWriter("logs.txt", true); fw.write("Computer get information about processor speed.\n"); fw.close(); } catch (IOException e) { e.printStackTrace();} return usingProcessorSpeed; } public void stopWork(int power) { if(power==0) { workOrNot = false; System.out.println("I stop working, goodbye."); }else {System.out.println("Computer still working.");} try { fw = new FileWriter("logs.txt", true); if(power==0) { fw.write("Computer stop working.\n"); }else {fw.write("Computer still working.\n");} fw.close(); } catch (IOException e) { e.printStackTrace();} } public void addFreeSpace(double size) { freeMemory += size; System.out.println("New free memory: " + freeMemory); try { fw = new FileWriter("logs.txt", true); fw.write("New free memory: " + freeMemory + "\n"); fw.close(); } catch (IOException e) { e.printStackTrace();} } public void takeFreeSpace(double size) { freeMemory -= size; System.out.println("New free memory: " + freeMemory); try { fw = new FileWriter("logs.txt", true); fw.write("New free memory: " + freeMemory + "\n"); fw.close(); } catch (IOException e) { e.printStackTrace();} } public void accelerateTheProcessorSpeed(double speed) { usingProcessorSpeed += speed; System.out.println("New processor speed: " + usingProcessorSpeed); try { fw = new FileWriter("logs.txt", true); fw.write("New processor speed: " + usingProcessorSpeed + "\n"); fw.close(); } catch (IOException e) { e.printStackTrace();} } public void pauseProcessorSpeed(double speed) { usingProcessorSpeed -= speed; System.out.println("New processor speed: " + usingProcessorSpeed); try { fw = new FileWriter("logs.txt", true); fw.write("New processor speed: " + usingProcessorSpeed + "\n"); fw.close(); } catch (IOException e) { e.printStackTrace();} } public void sayHelloWorld() { System.out.println("Hello, world!"); try { fw = new FileWriter("logs.txt", true); fw.write("Computer print 'Hello, world'.\n"); fw.close(); } catch (IOException e) { e.printStackTrace();} } abstract public void openDiskDrive(); } Класс ComputerApp package KI43.[ім’я автора приховано].Lab4; public class ComputerApp { public static void main(String[] args) { Laptop lap = new Laptop(); lap.setFreeMemory(20000); lap.setNewProcessorSpeed(3.2); double memory = lap.getFreeMemory(); double speed = lap.getProcessorSpeed(); System.out.println("Сomputer free memory: " + memory); System.out.println("Сomputer processor speed: " + speed); lap.sayHelloWorld(); lap.addFreeSpace(12.4); lap.pauseProcessorSpeed(0.2); lap.takeFreeSpace(20); lap.accelerateTheProcessorSpeed(0.3); lap.addVolume(10); lap.muffleTheVolume(5); lap.openDiskDrive(); lap.stopWork(0); } Інтерфейс Sound package KI43.[ім’я автора приховано].Lab4; interface Sound { void addVolume(int value); void muffleTheVolume(int value); } Класс Laptop package KI43.[ім’я автора приховано].Lab4; public class Laptop extends Computer implements Sound{ private int max=100; private int valueOfVolume=50; public void addVolume(int value) { if((value+valueOfVolume)<=max) { valueOfVolume+=value; System.out.println("New volume: "+valueOfVolume); }else System.out.println("Invalid value!"); } public void muffleTheVolume(int value) { if((valueOfVolume-value)>=0) { valueOfVolume-=value; System.out.println("New volume: "+valueOfVolume); }else System.out.println("Invalid value!"); } public void openDiskDrive() { System.out.println("Disk drive open you can insert disk."); } } Рис. 1 Результат роботи програми Рис. 2 Документація до классу ComputerApp, згенерована автоматично, з допомогою спеціальних коментарів Рис. 3 Документація до абстрактного классу Computer, згенерована автоматично, з допомогою спеціальних коментарів Рис. 4 Документація до классу Laptop, згенерована автоматично, з допомогою спеціальних коментарів Висновок: Під час виконання даної лабораторної роботи я ознайомився з процесом розробки класів та пакетів мовою Java.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!