ІНСТРУКЦІЯ ДЛЯ КОРИСТУВАЧА

ЗМІСТ

ЗМІСТ. 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="п&apos;ятниця"

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="п&apos;ятниця"

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-додаток, завданням якого є збір інформації про погоду з сайтів та на їх основі вираховування найімовірнішої погоди на найближчий час.

Для початку роботи я ознайомився з мете реологічними сайтами та дослідив відображення інформації про температуру на сторінці для подального зчитування її.