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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
ЗІ
Кафедра:
Кафедра САПР

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

Рік:
2011
Тип роботи:
Задача
Предмет:
ОБД

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет “Львівська політехніка” Кафедра САПР Реалізація методології об’єктно-орієнтованого проектування для вирішення прикладних задач в середовищі Windows Звіт по лабораторному практикуму з курсу “ Методи та засоби об'єктно-орієнтованого проектування” Львів – 2011 Індивідуальне завдання ВАРІАНТ № 4 Використовуючи методологію об’єктно-орієнтованого програмування, скласти програму на мові С++ для вирішення задачі роботи з лінійним одно направленим списком (формування списку, виведення списку, сортування списку). Мета роботи – ознайомитись з особливостями реалізації методології об’єктно-орієнтованого проектування для вирішення прикладних задач в середовищі Windows та Visual C++. Теоритичні відомості Основні концепції ООП Об'єктно-орієнтоване програмування або ООП (object - oriented programming) - методологія програмування, заснована на представленні програми у вигляді сукупності об'єктів кожен з яких являється реалізацією визначеного типу, що використовує механізм пересилки повідомлень і класи організовані в ієрархію наслідування. Центральний елемент ООП - абстракція. Дані за допомогою абстракції перетворяться в об'єкти, а послідовність обробки цих даних перетворюється на набір повідомлень, що передаються між цими об'єктами. Кожен з об'єктів має свою власну унікальну поведінку. До об'єктів можна звертатися як до окремих сутностей, які реагують на повідомлення, що наказують їм виконати якісь дії. ООП характеризується наступними принципами (по Алану Кею) : усе являється об'єктом; обчислення здійснюються шляхом взаємодії (обміну даними) між об'єктами, при якому один об'єкт вимагає, щоб інший об'єкт виконав деяку дію; об'єкти взаємодіють, посилаючи і отримуючи повідомлення; повідомлення - це запит на виконання дії, доповнений набором аргументів, які можуть знадобитися при виконанні дії; кожен об'єкт має незалежну пам'ять яка складається з інших об'єктів кожен об'єкт є представником класуякий виражає загальні властивості об'єктів даного типу у класі задається функціональність (поведінка об'єкту); тим самим усе об'єкти, які являються екземплярами одного класу, можуть виконувати одні і ті ж дії; класи організовані в єдину деревовидну структуру із загальним коренем, звану ієрархією спадкоємства; пам'ять і поведінка, пов'язана з екземплярами певного класу, автоматично доступні будь-якому класу, розташованому нижче в ієрархічному дереві. Абстрагування (abstraction) - метод рішення задачі, при якому об'єкти різного роду об'єднуються загальним поняттям (концепцією), а потім згруповані суті розглядаються як елементи єдиної категорії. Абстрагування дозволяє відокремити логічний сенс фрагмента програми від проблеми його реалізації, розділивши зовнішній опис (інтерфейс) об'єкту і його внутрішню організацію (реалізацію). Інкапсуляція (encapsulation) - техніка, при якій несуттєва з точки зору інтерфейсу об'єкту інформація ховається усередині нього. Спадкоємство (inheritance)- властивість об'єктів, за допомогою якої екземпляри класу дістають доступ до даних і методів класів-предків без їх повторного визначення. Спадкоємство дозволяє різним типам даних спільно використовувати один і той же код, призводячи до зменшення його розміру і підвищення функціональності. Поліморфізм (polymorphism) - властивість, що дозволяє використовувати один і той же інтерфейс для різних дій; поліморфній змінній, наприклад, може відповідати декілька різних методів. Поліморфізм перекроює загальний код, що реалізовує деякий інтерфейс, так, щоб задовольнити конкретним особливостям окремих типів даних. Клас (class) - безліч об'єктів, пов'язаних спільністю структури і поведінка; абстрактний опис даних і поведінки (методів) для сукупності схожих об'єктів, представники якої називаються екземплярами класу. Об'єкт (object) - конкретна реалізація класу, що володіє характеристиками стану, поведінки і індивідуальності, синонім екземпляра. Як це вже відзначалося на самому початку курсу, Java - лише одна з об'єктно-орієнтованих мов. Іншим активно використовуваним професійними програмістами мовою ТОП, з який ми познайомимося у наступному семестрі, являється C++. Надалі нас чекає знайомство з такими представниками цього сімейства, як Smalltalk, Delphi Pascal і CLOS. Слід мати на увазі, що в різних об'єктно-орієнтованих мовах для позначення одних і тих же концепцій ТОП використовуються ті, що злегка відрізняються один від одного терміни (див. словничок ТОП у кінці лекції). Контроль під час компіляції та під час виконання Мови програмування можна оцінити по тому, наскільки вони строгі до типам. Контроль типів включає перевірку існування планування для, типів їх параметрів, перевірку кордонів масивів і подібне. C + +, Java, Python, і Object Pascal віддають перевагу більш-менш ретельний контроль типів під час компіляції. С + +, можливо, найменш точний в цьому відношенні (на що вказує, наприклад, можливість присвоєння double до float), тоді як Java використовує перевірку типів найбільш широко. Це тому, що C++ забезпечує сумісність з Сі, який не дуже строго перевіряє типи під час компіляції. Наприклад, C і C++ вважають, що всі арифметичні типи сумісні (хоча привласнення float цілої змінної викличе попередження компілятора). У Object Pascal і Java логічне значення не є цілим, а символ - ще один відмінний і несумісний тип. Той факт, що віртуальна машина Java інтерпретує байтовий код під час виконання, не означає, що ця мова відмовляється від перевірки типів під час компіляції. Навпаки, у цій мові перевірка найбільш ретельно. Інші OО мови, такі як Smalltalk і CLOS, навпаки, схильні більшість перевірок типів (якщо не всі) здійснювати під час виконання. Чисто об'єктно-орієнтовані та гібридні мови Розрізняються чисті та гібридні об'єктно-орієнтовані мови. Чисті - це ті, які дозволяють використовувати тільки одну модель програмування - об'єктно-орієнтовану. Ви можете оголошувати класи і методи, але не можете завести глобальні змінні і звичайні функції і процедури старого типу. Серед трьох наших мов, тільки Java і C # є чистими OО мовами (як Eiffel і Smalltalk). На перший погляд це здається позитивною ідеєю. Проте вона веде до того, що ви використовуєте купу статичних методів і статичних даних, що не так вже відрізняється від використання глобальних функцій і даних, за винятком більш складного синтаксису. На мою думку, чисті OО мови дають перевагу новачкам в ООП, тому що програміст змушений використовувати (і вчити) модель ООП. C++ і Object Pascal, навпаки, - типові приклади гібридних мов, які дозволяють програмістам використовувати при необхідності традиційний підхід C або Pascal. Smalltalk розширює цю ідею до рівня «обоб'екєктування» таких визначених типів даних, як цілі і символи, а також мовних конструкцій (таких як цикли). Це теоретично цікаво, але сильно зменшує ефективність. Java зупиняється багато раніше, допускаючи присутність простіші не ОО типів даних (хоча є необов'язкові класи-обгортки і для простих типів). Проста об'єктна модель і посилальної-об'єктна модель Третій елемент, по якому розрізняються мови ООП - їх об'єктна модель. Деякі традиційні мови ООП дозволяють програмістам створювати об'єкти в стеку, в купі (у хіпі - heap) або в статичній пам'яті. У цих мовах змінна типу клас відповідає об'єкту в пам'яті. Так працює C++. Останнім часом з'явилася тенденція використовувати іншу модель, часто звану посилально-об'єктною моделлю. У цій моделі кожен об'єкт динамічно розміщується в купі, а змінна типу клас фактично є посиланням або Хендл об'єкта в пам'яті (технічно це щось на кшталт покажчика). Java і Object Pascal обидва використовують цю посилальну модель. Як ми побачимо, коротко це означає, що вам необхідно не забути виділити пам'ять для об'єкта. Опис статистичної моделі проекту Діаграма класів  Текст програми package Goruk; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; public class JTableDemo extends JFrame { static ArrayList<Object[]> list = new ArrayList<Object[]>(); JTable table; DataModel dataModel = new DataModel (); JTableDemo () { table = new JTable (dataModel); getContentPane ().add (new JScrollPane (table)); JButton insertBtn = new JButton ("Добавити "); insertBtn.addActionListener (new ActionListener () { public void actionPerformed (ActionEvent event) { dataModel.addRow ("", 0); } }); getContentPane ().add (insertBtn, BorderLayout.SOUTH); } public static void main (String[] args) { JTableDemo frame = new JTableDemo (); frame.setBounds (100, 100, 300, 300); frame.setDefaultCloseOperation (EXIT_ON_CLOSE); frame.setVisible (true); } } class DataModel extends AbstractTableModel { private final String[] HEADERS = {"Студент", "Оцінка"}; private final int COLS = 2; private int rows = 0; public String getColumnName (int col) { return HEADERS[col]; } public int getRowCount () { return rows; } public int getColumnCount () { return COLS; } public Object getValueAt (int row, int col) { return JTableDemo.list.get (row)[col]; } public void setValueAt (Object val, int row, int col) { if (col == 1){ int mark = new Integer (val.toString ()); if (mark > 100 || mark < 0){ JOptionPane.showMessageDialog (null, "Введите число от 0 до 100", "Ошибка ввода!", JOptionPane.ERROR_MESSAGE); return; } } JTableDemo.list.get (row)[col] = val.toString (); fireTableDataChanged (); } public boolean isCellEditable (int row, int col) { return true; } public void addRow (String name, int mark) { JTableDemo.list.add (new String[COLS]); setValueAt (name, rows, 0); setValueAt (mark, rows, 1); rows++; } public Class getColumnClass (int col) { switch (col) { case 0: return String.class; case 1: return Integer.class; } return null; } } Результат виконання програми  Висновок: На даному лабораторному практикуму я ознайомився з особливостями реалізації методології об’єктно-орієнтованого проектування для вирішення прикладних задач в середовищі Windows та Visual C++
Антиботан аватар за замовчуванням

20.07.2020 12:07-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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