Міністерство освіти і науки України
Черкаський державний технологічний університет
Кафедра програмного забезпечення автоматизованих систем
Курсова робота
з дисципліни “Об’єктно орієнтоване програмування”
Перевірив: Виконав:
Старший викладач студент групи ПЗС-1644
Пальоний Ю. М. Папуша І.В.
___________________ ___________________
Черкаси 2016
ЗМІСТ
ЗМІСТ. 2
ЗАВДАННЯ ДО КУРСОВОЇ РОБОТИ.. 3
ТЕОРЕТИЧНІ ВІДОМОСТІ 4
ТЕКСТ ПРОГРАМИ.. 11
ІНСТРУКЦІЯ ДЛЯ КОРИСТУВАЧА.. 17
ВИСНОВКИ.. 19
ЗАВДАННЯ ДО КУРСОВОЇ РОБОТИ
Необхідно створити додаток, який буде збирати інформацію про прогноз погоди, та згідно зібраної статистики виводити найімовірніший результат.
Програма буде функціонувати лише в користувацькому режимі, в якому користувач сможе спочатку вибирати свій обласний ценрт а потім передивляться інформацію щодо прогнозу погоди стосовно вибраної області.
В другому меню користувач сможе вибирати який прогноз він хоче подивитися:
- по області – інформація про погодний прогноз на вибрану користувачем область;
- по місту – обласному центру – інформація про погодний прогноз в обласному місті користувача;
- по країні – інформації про загальний погодний стан в країні, на даному етапі розробки буде доступна лише інформація про Україну.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Клас - певна абстрактна сутність, наприклад, "Пес", "Кіт", "Автомобіль", "Ціна товару", що на програмному рівні представлена змінними (полями даних) та методами, що оперують над цими полями даних.
Об'єкт - конкретний екземпляр класу. Наприклад Тайота є екземпляром класу "Автомобіль". По суті це клас, поля якого ініціалізовані і він завантажений у пам'ять комп'ютера. На основі одного класу, можна створити безліч об'єктів.
Успадкування (або ж "спадкоємство") - утворення нових класів на основі інших.
Інтерфейс - посилальний тип даних. Інтерфейси схожі на класи, проте їхні поля даних є константами, а методи не реалізовані. Об'єкти на основі інтерфейсів не створюються, проте класи можуть реалізовувати певний інтерфейс. І через об'єктну змінну інтерфейсного типу можна викликати реалізації даних методів.
Успадкування або ж спадкоємство(англ. inheritance) — це ще один важливий механізм об'єктно-орієнтованого програмування, який дозволяє створювати нові класи на основі вже існуючих. Клас на базі якого створюється підклас називають надкласом, суперкласом або ж батьківським класом. Новий клас, що розширює (extends) батьківський клас називають підкласом або дочірнім класом. На відміну від С++ де клас може мати кілька батьківських класів, мова програмування Java підтримує одинарне успадкування, тобто може бути лише один безпосередній надклас. У надкласу звичайно може бути свій надклас, проте також лише один безпосередній і т.д. Множинне успадкування доволі складне у застосуванні і вимагає обережного підходу, тому творці Java вирішили відмовитися від нього.
Об’єкти є динамічними змінними доступом до яких є вказівники.
JFrame f = new JFrame(); - створення вказівника “f” та об’єкту типу JFrame.
JFrame f; - опис вказівника на обєкт.
f= new JFrame(); - створення об’єкту.
f = b(); - якщо b повертає посилання класу JFrame.
JFrame f = new JTextField();
Вказівники.
Вказівникові на клас предок можна присвоювати об’єкти класів нащадків – при цьому відбувається приведення типу вгору.
class A {
Void m1() {
System.out.println(“A m1”);
}
}
class B extends A {
void m2() {
System.out.println(“B m2”);
}
}
class C {
Public static void main(String[] args);
A a1 = new B();
a1.m1();
a1.m2();
}
//--------------------------------------------------
Public . . . . . . main
String s=args[0]
A a1;
if (s.equals(“1”));
a1 = new BA();
else
a1 = new B();
a1.m213();
a1.m2();
Приведення типу вгору відбувається неявно автоматично і вважається безпечним, тому що обєкту класу нащадка можна послати всі повідомлення, які можна послати обєкту класа предка (в об’єкті класу нащадка гарантовано є всі методи, які є в обєкті класу предка).
class A{}
calss b extends A{}
A a1 = new B();
Поліморфізм
Поліморфізм – це здатність в мовах ООП викликати перевизначені віртуальні методи в залежності від реального типу об’єктів а не від типу вказівника на нього. В java всі методи є віртуальними, крім оголошених з ключовим словом final.
class A {void m1(){System.Out.println(‘A’)}}
class B {void m1(){System.Out.println(‘B’)}}
A a1= new B();
A1.m1();
Буде виведено В.
Віртуальні методи – це впродовж написання і виконання програми (з моменту коли щось починає писатися, до моменту коли воно виконається) програма проходить compile time, run time
При створенні об’єкту будь-якого класу створюється його таблиця віртуальних методів, в якій розміщено адреси всіх віртуальних методів даного об’єкту. При виклику будь-якого віртуального методу програма отримує адресу цього методу з таблиці віртуальних методів і здійснює перехід за цією адресою.
Механізм виклику методів в якому використовується механізм віртуальних методів називається пізнім зв’язуванням. Віртуальні методи це ті методи які викликаються за допомогою механізму пізнього звязування.
Ініціалізація локальних змінних
Ініціалізація локальних змінних неявно не відбувається. Тому всі локальні змінні повинні бути ініціалізовані явно перед першим їх використанням.
void m1(){
int i=10;
if (tf getText() equal (“0”))
i=0;
else
I=1;
System.out.println(“i=”+i);
}
For (int j=0;j<5: j++)
i=1;
Контейнерні класи
Контейнерні класи призначені для того, щоб в об’єктах цих класів зберігати об’єкти довільних класів (довільну кількість). Контейнерні класи розділяються на два види: колекції (collection) та відображення (map). Колекції - це сукупність індивідуальних елементів з операціями доступу до них. Map – це сукупність пар елементів ключ-значення з операціями доступу до них. Колекції можна сприймати як масиви з динамічним розміром. В колекції може бути 0 або більше елементів; в будь-який момент часу можна додавати та видаляти елементи, при цьому розмір колекції збільшується/зменшується. Колекції поділяються на два види: List і Set. Вони відрізняються насамперед тим, що в Set не можуть повторюватися елементи. В звичайному Set порядок елементів не є таким, в якому вони додавалися до нього, Set використовує свій порядок елементів; в List порядок той же в якому елементи додавалися. Ключову роль в порівнянні об’єктів на однаковість грає метод equals: boolean equals(Object c). Метод equals належить до класу object тому він є присутнім у всіх класах. Для того, щоб можна було осмисллено перевіряти об’єкти певного класу на рівність, потрібно в цьому класі перевизначити метод equals.
class Table{
String material;
int height;
int widht;
String producer;
public boolean equals(Object o){
Table = (Table)o;
If(this material.equals(t getMAterial)&&)
}
Крім того для порівняння обєктів можна використовувати метод hashCose().
Специфікатори доступу до полів та методів. В java існують такі специфікатори доступу до полів та методів: private, public, protect.
Поле чи метод описані зі специфікатором private є доступними тільки в тому класі в якому вони описані. Поля та методи описані зі специфікатором public є доступними у всіх класах. Поля та методи описані зі специфікатором protected є доступними в класах даного пакету та класах нащадках того класу в якому вони описані. Крім того поля та методи можуть бути описані без зазначення специфікатора доступу взагалі – тоді вони називаються “friendly” і є доступними в даному класі та в класах даного пакету.
Специфікатори доступу дають можливість при описі класу виділяти інтерфейсні поля та методи (такі що будуть видимі «для зовнішнього світу») та внутрішні елементи які є невидимими для «зовнішнього світу»; це дає можливість забезпечити так зване приховування реалізації. Приховування реалізації це друга частина в ООП поняття інкапсуляції.
Специфікатори доступу до класів.
Клас може бути описаний зі специфікатором доступу public. Крім того у класу може зовсім не бути специфікатор доступу – тоді він є “friendly”.
В одному файлі з розширення java може бути тільки один public клас, імя якого повинно співпадати з імям файлу. Але в цьому файлі може бути довільна кількість підтримуючих friendly класів. Насправді специфікатори доступу private і protected можна використовувати для внутрішніх класів. За правилами інкапсуляції в обєктно орієнтованому програмуванні прийнято робити поля private і здійснювати доступ до полів тільки через методи того класу в якому це поле описано.
При перевизначенні методів не можна понижувати рівень доступу до методу.
Ключове слово final.
Ключове слово final може використовуватися при описі класів, полів та методів. В кожному з цих випадків слово final означає досить різні речі, хоча загалом воно має значення «це не можна змінювати». При використанні final при описі полів значення цьому полю можна присвоїти тільки один раз. Якщо так описано поле базового типу, то це звичайна константа; якщо так описано вказівник на обєкт то він може вказувати лише на один обєкт впродовж свого існування, тобто вказівник не може змінюватися, але обєкт на який він вказує, змінюватися може. Final методи не можна перевизначати; вони викликаються як макровизначення, без використання таблиці віртуальних методів тобто трошки швидше. final класів не можна спадкувати інші класи (прикладом такого є клас String).
ТЕКСТ ПРОГРАМИ
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="igor.papusha.weather.CountryActivity"
android:background="@color/accent_material_dark">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="+30°"
android:id="@+id/textView"
android:layout_below="@+id/textView4"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="субота"
android:id="@+id/textView4"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/textView"
android:layout_alignStart="@+id/textView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="неділя"
android:id="@+id/textView16"
android:layout_below="@+id/textView"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="+28°"
android:id="@+id/textView5"
android:layout_below="@+id/textView16"
android:layout_alignRight="@+id/textView4"
android:layout_alignEnd="@+id/textView4" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="понеділок"
android:id="@+id/textView6"
android:layout_below="@+id/textView5"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="+30°"
android:id="@+id/textView7"
android:layout_below="@+id/textView6"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="вівторок"
android:id="@+id/textView8"
android:layout_below="@+id/textView7"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="+31°"
android:id="@+id/textView9"
android:layout_below="@+id/textView8"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="середа"
android:id="@+id/textView10"
android:layout_below="@+id/textView9"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="+29°"
android:id="@+id/textView11"
android:layout_below="@+id/textView10"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="четвер"
android:id="@+id/textView12"
android:layout_below="@+id/textView11"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="+29°"
android:id="@+id/textView13"
android:layout_below="@+id/textView12"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="п'ятниця"
android:id="@+id/textView14"
android:layout_below="@+id/textView13"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="+30°"
android:id="@+id/textView15"
android:layout_below="@+id/textView14"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="150dp"
android:layout_height="70dp"
android:text="@string/back"
android:id="@+id/button"
android:background="@color/colorPrimary"
android:allowUndo="false"
android:accessibilityLiveRegion="none"
android:textColor="@color/abc_primary_text_disable_only_material_dark"
android:textSize="18sp"
android:layout_below="@+id/textView15"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="ПОГОДА ПО МІСТУ"
android:id="@+id/textView17"
android:layout_above="@+id/textView5"
android:layout_toLeftOf="@+id/textView6"
android:layout_toStartOf="@+id/textView6" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="п'ятниця"
android:id="@+id/textView18"
android:textSize="25dp"
android:layout_below="@+id/textView11"
android:layout_alignLeft="@+id/button"
android:layout_alignStart="@+id/button" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="+28°"
android:id="@+id/textView19"
android:textSize="75dp"
android:layout_alignTop="@+id/textView7"
android:layout_alignRight="@+id/button"
android:layout_alignEnd="@+id/button" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="igor.papusha.weather.ActivityTwo"
android:background="@color/accent_material_dark">
<Button
android:layout_width="fill_parent"
android:layout_height="110dp"
android:text="@string/btncity"
android:id="@+id/btncity"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:textColor="@color/abc_primary_text_disable_only_material_dark"
android:background="@android:color/holo_green_light"
android:textSize="24sp"/>
<Button
android:layout_width="fill_parent"
android:layout_height="110dp"
android:text="@string/btnregion"
android:id="@+id/btnregion"
android:layout_below="@+id/btncity"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:textColor="@color/abc_primary_text_disable_only_material_dark"
android:background="@android:color/holo_orange_dark"
android:textSize="24sp" />
<Button
android:layout_width="fill_parent"
android:layout_height="110dp"
android:text="@string/btncountry"
android:id="@+id/btncountry"
android:layout_below="@+id/btnregion"
android:layout_centerHorizontal="true"
android:textColor="@color/abc_primary_text_disable_only_material_dark"
android:background="@android:color/holo_red_light"
android:textSize="24sp" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="150dp"
android:layout_height="70dp"
android:text="@string/back"
android:id="@+id/btnback"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="@color/colorPrimary"
android:allowUndo="false"
android:accessibilityLiveRegion="none"
android:textColor="@color/abc_primary_text_disable_only_material_dark"
android:textSize="18sp" />
</RelativeLayout>
ІНСТРУКЦІЯ ДЛЯ КОРИСТУВАЧА
При першому включеннні додатку, користувача зустрічає екран, який пропонує йому вибрати область, в якій він проживає.
Екран вибору області
Піля вибору області, дані заносяться у базу даних. В будь-який час користувач може змінити область.
Наступним екраном є екран, на якому є три кнопки для вибору прогнозу, який хоче побачити користувач
Екран вибору прогнозу
Після вибору прогнозу користувач може його переглянути:
Екран перегляду прогнозу по місту
ВИСНОВКИ
На дипломну роботу було поставлено завдання створити web-додаток, завданням якого є збір інформації про погоду з сайтів та на їх основі вираховування найімовірнішої погоди на найближчий час.
Для початку роботи я ознайомився з мете реологічними сайтами та дослідив відображення інформації про температуру на сторінці для подального зчитування її.
Похожие работы
... системах наукової класифікації. Однак перш ніж зануритися в об’єктно-орієнтовану розробку, давайте розглянемо деякі з властивостей, загальні для класу "об'єктів". Абстракція Ціль об'єктно-орієнтованого програмування полягає в тому, щоб побачити в задачі абстракції об'єктів реального світу. Що за реальні об'єкти малися на увазі? Буквально будь-які, аби вони давали представлення про функці ...
... ї властивості з'являється кнопка - це розкриваючийся список значень. Виклик (активізація) інспектора об'єктів виконується через головне меню View – Object Inspector чи F11. Основні поняття об’єктно - орієнтованого програмування Клас- спеціальний тип даних, як категорія, яка має своі поля, місце і властивість. Сама категорія визначається загальною властивістю, яку мають всі єкземпляри цієі ...
... фізичну (архітектура моделей і процесів) структуру системи. Наступні поняття є в OOD фундаментальними: Інкапсуляція. Інкапсуляція є найважливішою властивістю об'єктів, на якій будується об'єктно-орієнтоване програмування. Інкапсуляція - це об'єднання в одному класі даних і дій над ними. При цьому включені в об'єкт підпрограми (методи) безпосередньо працюють з даними цього об'єкту, звертаються ...
... системи; до деяких складних систем неможливо навіть підступитися, якщо не почати з проектування шарів. Висновки В процесі роботи було створено програму - «Облік продуктового магазину». Програма реалізована в середовищі об’єктно-орієнтованого програмування Borland С++ Builder 6.0, на основі мови програмування С++. Було досліджено предметну область - «Продуктовий магазин», що внесло багато ...
0 комментариев