на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Створення навчальної програми по вивченню іноземної мови
p align="left">- є джерелом складних і пізно розпізнаваних помилок.

В той же час в мові Java повністю збережений “дух” програмування на С++, досвідченим С++ - програмістам буде потрібно один-два тижні на освоєння самої мови, а величезний об'єм програмного забезпечення, вже створеного з використанням С++, може бути адаптований під нову мову відносно легко.

У мові Java, так само як і в С++, існує набір вбудованих типів даних, які (так само як і в С++) не є об'єктами. Набір їх також схожий з набором базових типів С++ за деякими виключеннями.

Numeric - характерною відмінністю від С++ є те, що бінарне представлення чисел відтепер фіксоване:

- цілі числа: 8-бит byte, 16-бит short, 32-бит int, 64-бит long; всі числа із знаком, ключ unsigned з мови видалені;

- числа з плаваючою крапкою; 32-біт float, 64-біт double; подання повинне відповідати стандарту IEEE 754.

Character - відрізняються від С++ як синтаксисом, так і уявленням. Тип character є 16-розрядне число без знаку (діапазон 0-65,535). Кодування відповідає стандарту Unicode. Внаслідок того, що це кодування в ідеалі повинне охоплювати всі мови, що існують в світі, це уявлення повинне полегшити локалізацію програм.

Boolean - тип даних не виділений в С++, проте неявно присутній практично у всіх програмах. У Java тип називається boolean, може приймати значення true і false і не може (на відміну від С++) бути перетворений в інший тип.

Доданий новий оператор >>> логічного зсуву управо (так як немає беззнакових цілих чисел). Вбудована операція злиття рядків (оператор +).

На відмінність від С++ масиви в Java є повноцінними об'єктами з певним runtime уявленням. Декларація:

- Point myPoints[]; резервує посилання на масив, а не місце під реальний об'єкт; сам масив може бути потім створений виконанням;

- myPoints = new Point[10]; а його елементи заповнені операцією типу: myPoints[2]= new Point(); розмір масиву може бути отриманий під час виконання програми: howMany = myPoints.length;

Значення індексу перевіряється при кожному зверненні, при помилці викликається виняткова ситуація.

Покажчики повністю виключені з мови разом з цілою категорією важко вловимих помилок “сповільненої дії”. До того ж наявність покажчиків суперечить вимогам безпеки і ускладнює реалізацію складальника сміття.

Рядки Strings в Java є повноцінними об'єктами. Вони діляться на текстові константи (Strings) і рядки, що модифікуються (StringBuffer). Компілятор дозволяє явно визначати текстові літерали в програмі подібно до того, як це робиться в С++.

String hello = “Hello world!”; Посилання hello ініціюється об'єктом класу String на основі представлення “Hello world!” у кодуванні Unicode.

Оператор “+” може бути застосований до рядків, наприклад: System.out.println(”There are” + num + “characters in the file.”);

В Java відсутній вираз goto. Аналіз С/С++ текстів показав, що переважне число випадків використання цього оператора пов'язане з необхідністю виходу з вкладеного циклу. Для відлагодження таких ситуацій в Java перед початком блоку може ставитися мітка, а інструкції break і continue також можуть супроводжуватися міткою, на яку повинен бути здійснений перехід. Наприклад: test: for(int i = 0; i < 10; i++) for(int j = 0; j < 10; j++) if( i > 3) break test;

Необхідність явно управляти пам'яттю в С/С++ програмах завжди була проблемою для програмістів. Мало того, що самі програми рясніли викликами функції free або операторами delete, безпосередньо до логіки програми вони відношення не мають.

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

Java повністю знімає цю турботу з програміста. Автоматичний збиральник сміття зобов'язаний бути вбудований в run-time системи. Пам'ять об'єктів, на які більше немає посилань, врешті-решт повертається в систему.

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

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

З іншого боку, паузи в операціях користувача збиральник сміття може використовувати для своєї роботи, забезпечуючи наявність вільної пам'яті в моменти, коли це необхідно.

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

Конструкція typedef була успадкована С++ з С. Із Java вона викинута зовсім.

Необхідність в макропроцесорі також багато в чому відпала при написанні програм на С++. Майже все, для чого використовувалися макророзширення, можна було зробити елегантнішим і надійнішим чином, використовуючи конструкції самої мови.

Система неявно заохочувала створення кожним програмістом своєї власної підмножини мови, невідомої решті світу. У міру розростання кодів збільшується той смисловий контекст, в якому компілятор інтерпретує кожен рядок програми. Вже в проектах середнього розміру істотно зростає навантаження на компілятор, не говорячи вже про навантаження на пам'ять програміста.

Єдина важлива функція препроцесора, що залишилася -- дозволити включення в програму файлів-заголовків з описами класів. Ця операція може бути виконана просто і ефективно, якщо дозволити компілятору читати підготовлені бінарні файли з описом класів. Останній напрямок був вибраний при створенні мови Java.

Всі ці міркування дозволили повністю виключити необхідність використання текстового препроцесора в мові Java.

Структури struct і union не мають сенсу в Java, їх роль повністю виконують класи. Використання конструкцій типу union для типізованих об'єктів також більше не потрібне -- мова дозволяє визначити тип об'єкту при виконанні програми.

В цьому сенсі Java чисто об'єктно-орієнтована система. Функції і процедури, не прив'язані до контексту якого-небудь об'єкту, більше не присутні в системі. За ситуації, коли функція логічно не прив'язана до певного екземпляра класу, вона може бути створена як метод самого класу (тобто мати тип static).

Послідовна реалізація концепції множинного наслідування в С++ привела до істотних труднощів як в створенні компіляторів, так і у використанні його (множинного наслідування) в програмах. Як альтернатива Java використовує поняття інтерфейсу, що визначає набір методів, які повинні бути визначені в класі, що реалізовує цей інтерфейс.

Інтерфейс може також містити визначення деяких констант.

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

Досвід використання перевантажених операторів в С++ показує, що вони мають сенс в досить обмеженому наборі ситуацій. З іншого боку, зловживання цією властивістю може зробити програму абсолютно незрозумілою. Єдине “вбудоване” в мову Java виключення -- можливість використання оператора “+” для склеювання рядків.

В мові Java заборонено автоматичне перетворення типів, широко використовуване (і рекомендоване) в С++. Щоб перетворити елемент одного типу в іншій, необхідно вказати це явно, наприклад: int myInt; double myFloat = 3.14159; myInt = myFloat; // допустимо в С++, неприпустимо в Java myInt = (int)myFloat; // допустимо в Java. Виняток становить перетворення між вбудованими чисельними типами без втрати інформації.

Більшість досліджень показали, що застосування покажчиків в С/С++ є одним з основних джерел помилок. Внаслідок того, що в мові більше не стало структур, а масиви і рядки перетворилися на повноцінні об'єкти, потреба в покажчиках відпала.

Вміст рядків і масивів доступно тільки по індексах, причому контроль доступу під час виконання не дозволяє виходити за межі масиву або рядка.

Отже, ми показали дві з основних властивостей мови програмування Java:

- знайомий -- Java зберігає стиль програмування C і С++;

- простий -- кількість конструкцій мови в Java істотно скорочена в порівнянні із С і С++;

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

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

Ідейними спадкоємцями Java є такі мови, як C++, Eiffel, Smalltalk і Objective C. За винятком примітивних типів даних, практично все в мові є об'єктом.

Основні вимоги до об'єктно-орієнтованої системи:

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

- поліморфізм -- одне і те ж повідомлення, послане різним об'єктам, приводить до виконання різних операцій;

- спадкоємство -- нові класи можуть успадковувати дані і функціональність вже існуючих класів;

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

Клас є мовна конструкція, що визначає поля даних об'єктів даного класу (instance variables) і їх поведінку (methods). Практично клас в Java сам по собі не є об'єктом. Це лише шаблон, який визначає, з яких частин складатиметься об'єкт, створений за допомогою цього класу, і як він поводитиметься.

Простий приклад опису класу:

class Point extends Object { public double x; public double у; }

Створити об'єкт описаного вище класу можна декларацією: Point myPoint; // оголошення змінної типа Point myPoint = new Point(); myPoint.x = 10.0; myPoint.y = 25.7;.

При оголошенні класу можливо вказати методи спеціального вигляду, названі конструкторами і призначені для ініціалізації створеного об'єкту. Ім'я цих методів повинне співпадати з ім'ям класу, вони можуть мати певну кількість аргументів, наприклад: class Point extends Object { Point() { x = 0.0; у = 0.0; } Point(double x, double у) { this.x = x; this.y = у; } public double x; public double у; }, а використані вони можуть бути таким чином: Point а; Point b; а = new Point(); b = new Point(1.0, 2.0); - ім'я this у визначенні конструктора з аргументами використовується для позначення самого об'єкту, в методі якого ми знаходимося, в тих випадках, коли посилання на цей об'єкт не є явним.

Якщо один об'єкт в програмі примушує інший виконувати якусь операцію, то прийнято говорити, що він посилає повідомлення іншому об'єкту. Наприклад, ми можемо перевизначити наш клас таким чином: Pclass Point extends Object { private double x; private double у; public void setX(double x) { this.x = x; } public void setН(double у) { this.y = у; }… }. Ми тепер зробили поля x і у недоступними ззовні класу, але для зміни їх стану передбачили спеціальні методи setX і setY.

Спеціальне ім'я finalize зарезервоване для методу, який буде викликаний збирачем сміття перед тим, як об'єкт буде знищений. Внаслідок того, що Java звільняє нас від необхідності самим стежити за звільненням пам'яті, займаної об'єктами, необхідність в таких методах зазвичай виникає лише тоді, коли треба звільнити якісь зовнішні ресурси, наприклад, закрити відкритий файл: protected void finalize() { try { file.close(); } catch (Exception e) { } }.

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

Наприклад, ми можемо описати новий клас, відповідний координатам точки в тривимірному просторі, на основі вже описаного класу для точки на площині: class ThreePoint extends Point { protected double z; ThreePoint() { super(); z = 0.0; } ThreePoint(double x, double у, double z) { super(x, у); this.z = z; }}. Тут ми додали нову координату z, а поля x і у (і методи доступу до них) успадкували від класу Point.

Контроль доступу до даних і методів об'єкту в Java дещо відрізняється від С++. Крім трьох рівнів доступу, наявних в С++ (public, private, protected) є четвертий, такий, що знаходиться десь між рівнями public і protected. Він не має імені і використовується за умовчанням, коли явно не вказаний інший рівень. Поля цього типу доступні всередині тільки одного програмного пакету.

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

Також слід зазначити, що контроль доступу в C++ допомагає програмістові лише при побудові програми. Відмінності між полями, поміченими public і private, відсутні у виконуваному модулі, створеному з використанням цієї мови. У Java контроль доступу реальний, оскільки він здійснюється не тільки при компіляції, але і безпосередньо перед запуском кодів на виконання віртуальною машиною.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.