1   2   3   4
Ім'я файлу: шпора.docx
Розширення: docx
Розмір: 93кб.
Дата: 22.11.2020
скачати
Пов'язані файли:
Практична 1_Маланчук.docx

Java – це новітня об’єктно орієнтована мова програмування, розроблялася компанією Sun Microsystems з 1991 року і офіційно випущений 23 травня 1995 року. Спочатку нова мова програмування називалася Oak і  призначалася для програмування  електроніки, але згодом була  перейменований в Java і стала використовуватися для написання аплетів, прикладного та серверного програмного забезпечення.

 

До основних можливостей мови можна віднести

- розширені можливості обробки виняткових ситуацій;

- багатий набір засобів фільтрації введення/виводу;

- вбудовані класи представлення простих структур даних, такі як масив, список, стек і т. п.;

- наявність простих засобів створення мереженого програмного забезпечення;

- наявність класів, що дозволяють генерувати http-запити і відповіді;    

- вбудовані в мову засобу створення багато потокових програм;

- уніфікований доступ до баз даних на основі JDBC

 

Аплет (Applet)— це програма, написана на мові Java, призначена для роботі у веб-браузері у вигляді включення у веб-сторінку.  Будь-який аплет повинний коректно працювати в будь-якому браузері і на будь-якій апаратній платформі, де присутня віртуальна java-машина. Причому на відміну від звичайного застосування на Java, аплет працює в так званій «пісочниці» (sandbox), яка обмежує доступ аплету до комп'ютера користувача, для запобігання зловмисним діям.

Головною особливістю аплетів є те, що вони є справжніми програмами, а не черговим форматом файлів для зберігання мультфільмів або якої-небудь іншої інформації. Аплет не просто програє один і той же сценарій, а реагує на дії користувача і може динамічно змінювати свою поведінку.

 

Байт-код (byte-code — машинно-незалежний код низького рівня, що генерується компілятором і виконуваний віртуальною машиною. Більшість інструкцій байт-коду еквівалентні одній або декільком командам асемблера. Компіляція в байт-код займає проміжне положення між компіляцією в машинний код і інтерпретацією.

 

Java Virtual Machine, скорочено Java VM, JVM — віртуальна машина Java — основна частина виконуючої системи Java, так званою Java Runtime Environment (JRE). Віртуальна машина Java інтерпретує і виконує байт-код Java, заздалегідь створений з початкового тексту Java-програми компілятором Java.

Перевагою  подібного способу виконання програм, є те що байт-кода знаходиться в повній незалежності від ОС і обдладнання, що дозволяє виконувати Java програми на будь-якому пристрої, який підтримує віртуальну машину.

 

Ідеологія Java - Write once, run anywhere" (WORA).

 



Рис. 1.1 – Порівняння етапів підготовки до виконання програм, написаних на С++ і Java

 

Іншою важливою особливістю технології Java є доволі гнучка система безпеки, завдяки тому, що виконання програми повністю контролюється віртуальною машиною. Будь-які операції, які перевищують встановлені повноваження програми (наприклад спроба несанкціонованого доступу до даним або з'єднання з іншим комп'ютером) викликають негайне переривання. Це дозволяє користувачам легко завантажувати програми написані на Java на їх комп'ютери (або інші пристрої, наприклад мобільні телефони) з невідомих джерел, при цьому не побоюючись зараження вірусами, пропажі цінної інформації, і т.п.

 

Часто до недоліків такого  підходу відносять те, що виконання байт-коду віртуальною машиною може знижувати швидкодію  програм і алгоритмів, реалізованих на мові Java. Таке твердження було справедливе для перших версій віртуальної машини Java, проте останнім часом воно практично втратило актуальність. Цьому сприяли ряд удосконалень: застосування технологій JITs (Just-In-Time compilers), що дозволяє переводити байт-код в машинний код під час виконання програми з можливістю збереження версій класу в машинному коді, широке використання native-коду в стандартних бібліотеках, а також апаратні засоби, що забезпечують прискорену обробку байт-кода.

 

 

Java 2

В грудні 1998 року вийшла нова версія Java під номером 1.2 Вона містила стільки нововведень, в порівнянні із попередньою, що було вирішено перейменувати і дати назву

Java 2

 

В середині Java 2 існує три сімейства технологій, орієнтованих на різні сфери:

J2EE — Java Platform, Enterprise Edition, скорочено Java EE, призначена для створення програмного забезпечення для корпоративного сектору. Мета специфікацій — забезпечити масштабованість программ і цілісність даних під час роботи системи. Технологію J2EE

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

J2SE - Java Platform, Standard Edition, скорочено Java SE () - стандартна версія платформи Java 2, призначена для створення і виконання аплетів і програм, розрахованих на індивідуальне користування або на використання в масштабах малого підприємства.

J2ME — Java Micro Edition, призначена для використання в пристроях, обмежених по обчислювальній потужності (обмежений об'єм пам'яті, малий розмір дисплея, живлення від портативної батареї, а також низькошвидкісні і недостатньо надійні комунікаційні можливості), - в мобільних телефонах, PDA, вбудованих системах. У J2ME є дві конфігурації — CLDC (Connected Limited Device Configuration — конфігурація пристрою з обмеженими комунікаційними можливостями) і CDC (Connected Device Configuration — конфігурація пристрою з нормальними комунікаційними можливостями).

 

Java Foundation Classes, скорочено JFC — набір бібліотек класів на мові Java, що надають програмам на Java зручний API для створення графічного інтерфейсу користувача (GUI). До складу JFC входять, зокрема, бібліотека Swing, Java 2D і багато інших, включаючи історично першу бібліотеку Java для створення призначених для користувача інтерфейсів — Abstract Window Toolkit.

 



 

 

Відмінності між Javaта С++

Насправді Java запозичила в C++ лише синтаксис, а більшість ідей і концепцій реалізованих в ній було взято з іншої мови програмування SmallTalk. Через це, не дивлячись на візуальну близькість, Java та C++ мають як незначні так і доволі суттєві відмінності, що є наслідком ключових рішень розробників і створюють фундаментальний вплив на спосіб написання і проектування програм.

Також на розробку Java вплинув той факт, що головним тут було не створити заміну системним мовам програмування C/C++, а створити мову для написання захищених програм які легко переносити між різними платформами.

 

Які можливості відсутні в Java:

Однією із головних відмінностей Java в порівнянні із C++ є те, що Java не підтримує вказівників!

Вони були виключені із Java із двох причин: по перше вони не забезпечують захищеності, а по друге – вказівники є джерелом потенційних помилок при написанні програм. Тому в Java вказівників не існує, а відповідно не існує і пов’язаних із ними операцій: ‘*’, ‘&’, ‘->’.

 

Інші відмінності:

- Java не містить в свою складі структур(structures) і об’єднань(unions), розробники порахували їх зайвими, оскільки існує більш загальне поняття класу, яке містить в собі інші.

- Java не підтримує перезавантаження операторів. Розробники не вважали дану можливість достатньо важливою

- Java не влючає до свого складу пре процесора і не підтримує його директив.

- Java не виконує ніяких автоматичних перетворень типів, що призводять до втрати точності. (перетворення з long в int необхідно задавати явно )

- весь код Java міститься в одному або декількох класах, тому в ній не існує нічого схожого на глобальні змінні чи функції

- Java не підтримує множинне наслідування

- Java не підтримує typedef

- Java підтримує конструктори класів, але в ній відсутні деструктори.

- Java не допускає використання оператора goto

- Java не містить оператора delete

- логічну змінній типу boolean не можна присвоїти значення відмінне від true чи false.

 

Що було додано:

- можливість багатопоточного програмування (multithreaded programming) – технологія, яка дозволяє виконуватися одній або декільком частинам одніє і тіє їж прорами виконуватися паралельно.

- як і в С++ в Java підтримується динамічне виділення пам’яті при допомозі оператору new. Але оператор вивільнення зайнятої пам’яті delete – відсутній. Замість цього, в Java використовується технологія, яка має назву автоматичного “збирання мусору” (garbage collector), завдяки якій програміст не повинен робити це вручну.

- тип char декларує 16-бітну змінну для зберігання символів Unicode.

- додано оператор >>> який здійснює без знаковий зсув право

- на доповнення до двох типів коментарів, що мали місце в C++, додано третій тип – документуючи коментарі (documentation comment), які починаються з послідовності /** а закінчуються */

- Java містить вбудований клас String, який значно полегшує роботи із стрічками символів.

 

 

 

Типи даних

Булевий тип – набуває значень true і false.

         booelan a;

 

&& - Логічне AND     || - Логічне OR       ^ - Логічне XOR      ! - Логічне NOT

 

 

Операція порівняння.

Результатом таких операцій порівняння та приналежності є логічна величина типу boolean.

== рівно a==b

!= не рівно a!=b

> більше a>b

< менше a
>= більше або рівно a>=b

<= меньше або не рівноa<=b

instanceof Принадлежность объекта классу obj instanceof MyClass

 

Цілі типи

byte (1 байт)       -128..127

short (2 байти)     -2^15..2^15

char (2 байти)      0..65535

int (4 байти)       -2^31..2^31

long (8 байти)      -2^63..2^63

 

Оператори для роботи із цілими числами: +, -, *, /, %, =, ++, --, +=, -=, *=, /=, %=.

 

Дійсні типи

float (4 байти)     1.5^-45..3.4^38

double (8 байт)     5^-324..1.7^308

 

для оголошення констант в Java використовується ключове слово final.

public static final double E = 2.7182818284590452354;

 

 

 

 

Класи обгортки

У ряді випадків замість значення примітивного типу потрібно об'єкт. Наприклад, для роботи зі списками об'єктів. Це пов'язано з тим, що робота з об'єктами в Java може бути уніфікована, оскільки всі класи Java є спадкоємцями класу об'єкту, а для примітивних типів цього зробити не можна.

 

Для таких цілей у Java кожному примітивного типу зіставляється об'єктний тип, тобто клас. Такі класи називаються оболонкових (class wrappers). У загальному випадку вони мають ті ж імена, що і примітивні типи, але починаються не з малої, а з великої літери. Виключення чомусь становлять типи іnt і символів, для яких імена оболонкових класів Integer і Character.

 

byte

Byte

short

Short

char

Character

int

Integer

long

Long

float

Float

double

Double

 

Основне призначення класів обгорток - створення об'єктів, що є обгортками над значеннями примітивних типів. Процес створення такого об'єкту  із значення примітивного типу називається пакуванням (boxing), а зворотне перетворення з об'єкта у величину примітивного типу - розпаковуванням (unboxing). 

 

 

Для перетворення стрічки в число відповідного типу можна використати методи:

 

Byte.parseByte(строка)             Short.parseShort(строка)

Integer.parseInt(строка)           Long.parseLong(строка)

Float.parseFloat(строка)           Double.parseDouble(строка)

 

 

Приклад програми

 

class FirstProgram {

    public static void main (String args[]) {

        int x;

        double y;

        char sym;

        

        x = 10;

        y = 15.03;

        sym = 'x';

       

        System.out.print("This is x: ");

        System.out.print(x);

        System.out.print(“\n”);

       

        System.out.println("This is y: " + y);

        System.out.println("This is sym: " + sym);

    }

}

Класи

Базовим елементом об'єктного орієнтованого програмування в мові Java є клас. Класи в Java не обов'язково повинні містити метод main. Єдине призначення цього методу - вказати інтерпретатору Java, звідки треба починати виконання програми.

Для того, щоб створити клас, достатньо мати початковий файл, в якому буде присутнє ключове слово class, та допустимий ідентифікатор і пара фігурних дужок для його тіла.

 

      class Student {

 

}

 

Ім'я файлу Java повинне відповідати імені класу, що зберігається в ньому. Регістр букв важливий і в імені класу, і в імені файлу (Student.java).

Клас в Java знаходяться в пакета (package), який групує їх за певним функціональним призначенням і має ієрархічну.

 

Клас в Java має наступний вигляд:

 

package ua.tstu.fis.sp-11;

 

public class Student {

    private String name;

    private String birth;

    private int rb_num;     // record book num

    private double rating;

 

    public Student(String name, String birth, int rb_num) {

        this.name = name;

        this.birth = birth;

        this.rb_num = rb_num;

        this.rating = 0;

    }

}

 

Java надає декілька рівнів захисту, що забезпечують можливість налаштування зони видимості даних і методів. Із-за наявності пакетів Java повинна уміти працювати з чотирма категоріями видимості між елементами класів:

·  класи і підкласи в тому ж пакеті (за умовчанням);

·  незалежні класи (private);

·  підкласи в поточному і інших пакетах (protected);

·  класи, які не є підкласами і не входять в той же пакет (public).

 

import T2.Student;

 

public class Main {

 

    public static void main(String[] args) {

        Student student =

new Student ("John McClane", "01.02.1991", 025);

    }

}

 

 

При використанні слова new, викликається описаний нами конструктор класу.

Деструкції в мові Java не використовуються, об'єкти знищуються [?]збитрач сміття|збирачем сміття[/?] після припинення їх використання. Аналогом дектруктора є методи finalize(). Середовище мови Java викликатиме їх кожного разу, коли збирач сміття знищуватиме об'єкти цього класу.

 

Додамо ряд методів:

 

    public String getName() {

        return name;

    }

 

    public String getBirth() {

        return birth;

    }

 

    public int getRb_num() {

        return rb_num;

    }

 

    public double getRating() {

        return rating;

    }

 

    public void setRating(double rating) {

        this.rating = rating;

    }

 

Методи які встановлюють значення певного атрибуту класу, мають назву сетери (setter) і їх ідентифікатор складається із назви змінної та слова set.

Аналогічним чином, при отриманні значення деякого атрибуту, використовуються методи які називаються гетерами (getter).

 

В Java кожен клас по замовчуванню унаслідується від базового класу Object. Даний клас володіє такими методами:

 - метод equals() - при порівнянні двох об'єктів повертає true, якщо об'єкти еквівалентні. Якщо потрібно порівнювати об'єкти класу створеного програмістом, то цей метод необхідно перевизначати в цьому класі.

- метод toString() – повертає стрічку з описом об’єкту. Використовується наприклад при виведенні об’єкту на екран.

- метод hashCode () – хешкод, це ціле число, яке генерується на основі певного об’єкту. Його можна розглядати як деякий шифр об’єкту і тому для різних об’єктів він повинен відрізнятися.

 

@Override

    public String toString() {

        String info = "Student: " + name

                + ", birth:  " + birth

                + ", RB num: " + rb_num

                + ", Raring: " + rating;

        return info;

    }

 

@Override

    public boolean equals(Object obj) {

        if (obj instanceof Student) {

            Student anotherStudent = (Student) obj;

            if ((this.name == anotherStudent.name)

&& (this.birth == anotherStudent.birth))

                return true;

        }

        return false;

    }

 

 

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

 

    public double schollarship () {

        double amount;

        if (rating >= 4.5) {

            amount =500;

        } else {

            amount = 0;

        }

        return amount;

    }

 

Якщо застосувати більш професійний підхід, то така ділянка коду мали би виглядати як:

- забрати пряме використання числових значень і застосувати константи

- передбачити можливість надбавок і організувати їх у вигляді окремого захищеного метода

 

    private final double MIN_SCOLLARSHIP_RATING = 4.5;

    private final double BASE_SCHOLLARSHIP_AMOUNT = 500;

 

    public double schollarship () {

        double amount;

        if (rating >= MIN_SCOLLARSHIP_RATING) {

            amount = BASE_SCHOLLARSHIP_AMOUNT;

            amount += markup();

        } else {

            amount = 0;

        }

        return amount;

    }

 

    protected double markup () {

        double amount = 0;

        if (rating == 5.0) {

            amount = BASE_SCHOLLARSHIP_AMOUNT*0.25;

        }

        return amount;

    }

 

  1   2   3   4

скачати

© Усі права захищені
написати до нас