Об’єктно орієнтоване програмування

Узнать стоимость написания работы

Міністерство освіти і науки України

Черкаський державний технологічний університет

Кафедра програмного забезпечення автоматизованих систем

Курсова робота

з дисципліни “Об’єктно орієнтоване програмування”

Перевірив: Виконав:

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

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

Источник: портал www.KazEdu.kz

Другие материалы

  • Обєктно-орієнтовне програмування
  • ... головне в тому, що C++ додає до З об'єктну орієнтованість. Відомо декілька версій C++. У версії 1.0 реалізовані основні механізми об'єктно-орієнтованого програмування, такі як одиночне спадкоємство і поліморфізм, перевірка типів і перевантаження функцій. У створеній в 1989 році версії 2.0 знайшли ...

  • Програмування мовою С++ з використанням об’єктно-орієнтованого програмування
  • ... гарними кандидатами на повторне використання. • Бути зрозумілим. Найбільша вигода об'єктно-орієнтованого проектування — в представленні проблеми в легкодоступному, тим хто розуміє, вигляді. Захоплення ресурсів при ініціалізації Однією з переваг об'єктно-орієнтованого програмування, яке упуска ...

  • Об’єктно-орієнтована програма обліку продуктового магазину
  • ... навіть підступитися, якщо не почати з проектування шарів. Висновки В процесі роботи було створено програму - «Облік продуктового магазину». Програма реалізована в середовищі об’єктно-орієнтованого програмування Borland С++ Builder 6.0, на основі мови програмування С++. Було досліджено ...

  • Об’єктно-орієнтоване програмування МП Delphi
  • ... список значень. Виклик (активізація) інспектора об'єктів виконується через головне меню View – Object Inspector чи F11. Основні поняття об’єктно - орієнтованого програмування Клас- спеціальний тип даних, як категорія, яка має своі поля, місце і властивість. Сама категорія визначається ...

  • Концепції програмування. Графічна система OpenGL
  • ... доступних кольорів, області для відсікання і інших операцій, маршрут для операцій малювання" В OpenGL є аналогічне посиланню на контекст пристрою поняття посилання на контекст відтворення Графічна система OpenGL, як і будь-який інший додаток Windows (хоча і розміщене в DLL), також потребує ...

  • Мова програмування Assembler
  • ... взаємодія пристроїв уведення-висновку з мікропроцесором. Переривання цікавлять нас тому, що обробка переривань - це прерогатива програмування на мові асемблера. У високорівневих мовах відсутні засоби роботи з перериваннями на машинному рівні. Переривання звичайно викликаються зовнішніми пристроями. ...

  • Засоби виводу інформації на принтер в об’єктно-орієнтованому середовищі програмування Delphi
  • ... дочірню смугу. Якщо цій властивості привласнити значення True, то в звіті буде автоматично створена дочірня смуга. При виводі інформації на принтер в середовищі Delphi використовуються ще компоненти PrintDialog та PrintSetupDialog. Компонент PrintSetupDialog призначений для на лаштування параметр ...

  • Пошук найкоротшого шляху на орієнтованому графі
  • ... нтованих мов С + + є найбільш широко використовуваним. І саме з його допомогою в даному курсовому проекті реалізується алгоритм Дейкстри. 1. ПОСТАНОВКА ЗАВДАННЯ І СФЕРА ЇЇ ЗАСТОСУВАННЯ Основним завданням даного курсового проекту є програмна реалізація алгоритму пошуку найкоротшого шляху між ...

  • Мова програмування C++ та середовище розробки Microsoft Visual C++
  • ... API-функцій. Щоб полегшити їх роботу, фахівці Microsoft розробили бібліотеку MicrosoftFoundationClasses— MFC . Використовуючи готові класи C++, можна набагато швидше і простіше вирішувати багато задач. Бібліотека MFC істотно полегшує програмування в середовищі Windows. Ті, хто володіє достатнім досв ...

  • Розробка інформаційної системи мовою програмування С
  • ... даних. Ця дисципліна вчить мене думати, надає мені практичних знань та досвіду, щоб розробляти модель програми ще до стадії набору програми на заданій мові програмування. Ця дисципліна вчить мене тим основним речам, без яких жоден представник вибраної мною професії не може обійтись у своїй праці, ...

  • Середовище програмування Borland Delphi
  • ... версія мови програмування Паскаль, що постійно вдосконалюється; вона називається Delphi (в шостій і більш ранішніх варіантах системи Delphi вона називалась Object Pascal - "Об’єктний Паскаль"). Ця версія включає набір розширень, орієнтованих тільки на застосування в рамках середовища ...

  • Розробка тестової системи для перевірки знань з предмету "Системне програмування"
  • ... Наприклад, вводимо назву виробу, норму витрат та кількість виробів – і перевіряємо обчислену потребу матеріалу. Програма цієї курсової роботи з дисципліни «Системне програмування та операційні системи» призначена для перевірки тестового контролю знань. Кожне запитання тесту може мати кілька варіант ...

  • Access і Visual basic for Application. Excel VBA: прийоми програмування
  • ... : Do Until Счетчик=10 Print Счетчик=Счетчик+1 Loop 6. Excel VBA: Прийоми програмування Як визначити останній запис в таблиці Excel? Необхідно знайти останній запис в електронній таблиці. Це можна було б організувати функцією Application. SpecialCells (xlLastCell) Як відмінити виділення ...

  • Програмування інтерфейсу
  • ... , в яких застосовувався б стиль прямого маніпулювання, проте до моменту написання книги проектування таких інтерфейсів представляло достатньо складне в аспекті програмування завдання. В принципі необхідно застосовувати різні стилі взаємодії для управління різними системними об'єктами. Даний принцип ...

  • Створення бази відеофільмів
  • ... – можливість його повторного використання для вирішення різних задач. 2 РОЗРОБКА РІШЕННЯ ЗАДАЧІ СТВОРЕННЯ БАЗИ ВІДЕОФІЛЬМІВ 2.1 Бази даних 2.1.1 Основні положення та моделі БД Взагалі технологія баз даних як самостійна гілка розвитку інформатики з’явилася порівняно недавно: початок досл ...

Каталог учебных материалов

Свежие работы в разделе

Наша кнопка

Разместить ссылку на наш сайт можно воспользовавшись следующим кодом:

Контакты

Если у вас возникли какие либо вопросы, обращайтесь на email администратора: admin@kazreferat.info