Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Об'єктно орієнтовне програмування1.doc
Скачиваний:
5
Добавлен:
17.11.2019
Размер:
1.38 Mб
Скачать

5. Реалізація

І СПЕЦИФІКАТОРИ ДОСТУПУ

  1. Пакет і його особливості.

  2. Специфікатори доступу.

  3. Виконання імпорту для зміни поведінки.

  4. Інтерфейс і реалізація.

Для забезпечення контролю за доступом до різних частин будь-якого написаного класу, його змінних методів використо­вується спеціфікатор доступу. Спеціфікатори доступу — це прості ключові слова, які вказуються перед елементами конт­ролю.

Для регулювання інкапсуляції об'єкта мова Java надає три головних ключових слова:

  • public означає, що клас, метод або змінна проглядати­меться об'єктами інших класів де завгодно;

  • privateозначає, що до змінних і методів має доступ тільки поточний об'єкт;

  • protected забезпечує проміжний рівень доступу. Він діє як public стосовно класів, породжених даним класом. Для всіх ін­ших класів в інших пакетах він схожий на private.

Зауважимо, що класи, методи та змінні за замовчуванням не є ні public, ні private, ні protected. Таким чином, якщо метод не має явного специфікатора доступу, то він проглядається тільки класами одного й того ж самого пакета.

1. Створити програму, в якій створюється об'єкт класу Array List, але не імпортується пакет java.util. *.

2. Перетворити фрагмент коду: import mypackage. *;

My class m =new My Class (); у такий, що компілює і виконує набір файлів Java.

3. Із фрагмента коду importcom. bruceeckel. *;

import java.util. *; скласти програму. Перевірити, чи існують суперечності дій.

4. Узагальнити клас: package com.bruceeckel.tools.;

public class P {

public static void rint(String s) { System, out.print(s) ;

}

public static void rintln(String s) { System.out.println (s);

додавши до нього всі перевантажені версії методів rint() і rintln(), необхідні для виводу всіх примітивних типів Java.

5. Змінити пропозицію import у файлі TestAssert.java, щоб включити і виключити механізм контролю:

importcom. bruceeckel. tools. *; public class TestAssert { public static void main(String[] args) { Assert. is_true((2+2) = = 5); Assert. isjalse((l + 1) ==2); Assert.is_true((2+2) ==5, «2+2==5»); Assert.is jalse((l + 1) ==2, «1+1 1=2»);

  1. Створити клас, в якому існують дані і методи зі специфікаторами public, private, protected, а також «подружні». Створити об'єкт цього класу і переглянути повідомлення, які видає компілятор при зверненні до всіх членів класу. Пам'ятайте, що класи в поточні директорії є частиною пакета «за замовчуванням».

  2. Створити клас із protected даними. Створити другий клас у цьому самому файлі, який маніпулює protected даними з першого класу.

8. Змінити клас public class Cookie {

public Cookie() {

System.out.print(«»);

}

protected void bite() {

System.out.println(«bite»);

}}

так, щоб метод bite() не був відкритим.

9. 3 файла Lunch.java

class Soup {

private Soup() {}

// (l) Дозвіл на створення об 'єктів

//у статичному методі

public static Soup makeSoup() {

return new Soup();

}

//(2) Створюємо один статичный об'ект // i на вимогу повертааю потання на нього,

private static Soup psl=new Soup();

public static Soup access() {

return psl;

}

public voidf {}

}

class Sandwich {

// Використовуємо клас Lunch

voidf() { newLunch();}

}

//У файлi може бути визначений тільки один

//public клас

public class Lunch {

void test() {

Soup priv2 = new Soup. makeSoup();

Sanwich f1 = new Sandwich();

Soup.access.f();

}

} III:~

створити клас з ім'ям ConnectionManager, який керує обмеженим масивом об'єктів Connection. Програміст не повинен безпосередньо створювати об'єкти Connection, а може отримувати їх за допомогою статичного методу в класі ComnectionManager. Коли у класі закінчиться запас об'єктів, то він має повертати посилання null. Перевірити класи в методі main().

10. Створити в локальній директорії такий файл:

package cO5. local;

class PackagedClass() {

public PackagedClass() {

System.out.println(«Cmворюємо клас в пакеті»);

}

}///:~

Потім створити в директорії c05.fore такий файл:

package с 05.fore;

import cO5. Local. *;

public class Fore {

public static void main (String [] args) {

PackagedClass pc = newPackagedClass ();

}

}///:~

Пояснити, чому компілятор видає повідомлення про помилку i що треба зробити?