Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Абстрактні класи. Абстрактні методи




Немає нічого чудового в тому, що наш приклад з хіміопрепаратами мі розпочали з класу Drug, який не може існувати сам по собі. Дійсно, немає хіміопрепарату, який би не належав до підкласу конкретних хіміопрепаратів (наприклад, Abacavir, Abciximab, Absorbable gelatin, Aspirin і т.д.). Тобто кожен хіміопрепарат є або Acarbose, або Acebutolol, або Acetaminophen. Клас, такий як Drug, є більш абстрактним поняттям, ніж конкретний фізичний об" єкт, який безпосередньо можна взяти. Такий клас називається абстрактним класом. Головна особливість абстрактного класу - не існує об" єктів - екземплярів абстрактного класу. Тобто не існує екземплярів класу Drug, існують лише екземпляри його підкласів. Виникає питання про доцільність використання абстрактних класів. Відповідь продемонструємо модифікованим класом Drug:

import java.lang.String;

abstract public class Drug

{

// далі означуються змінні класу

// концентрація хіміопрепарату в плазмі (міліграм/мл)

double m_dPlasmaDrugConcentration;

// далі - методи класу

// призначене дозування (міліграм/хв)

abstract public double DosingRate()

// AverageDrugConcentration - середня концентрація

// хіміопрепарату (міліграм/мл)

double AverageDrugConcentration(double dClearance)

{

return DosingRate() / dClearance;

}

}

public class IntravenousInfusionDrug extends Drug

{

// швидкість неперервного введення

double m_dInfusionRate;

double DosingRate()

{

return m_dInfusionRate;

}

}

public class IntermittentlyGivenDrug extends Drug

{

// доза при введенні з перервами

double m_dDose;

// година між введеннями хіміопрепарату у випадку з перервами

double m_dDosingInterval;

double DosingRate()

{

return m_dDose / m_dDosingInterval;

}

}

public class Aspirin extends IntermittentlyGivenDrug

{

String m_sBrandName;

 

//.. решта означень класу

}

Тут, крім виділення нового класу Aspirin для представлення конкретного хіміопрепарату, надана можливість враховувати спосіб введення хіміопрепарату(малий. 1). Метод DosingRate() класу Drug є абстрактним, оскільки неможливо розрахувати швидкість дозування для хіміопрепарату взагалі.

У подальшому DosingRate() реалізовано у конкретних підкласахIntravenousInfusionDrug та IntermittentlyGivenDrug.

 

Малюнок 1. Ієрархія класів для представлення хіміопрепаратів

 

Статичні елементи класу

Більшість властивостей, таких як m_dDose, m_dDosingInterval - унікальні для об" єктів. Але деякі властивості є спільними для усіх об" єктів даного класу. Наприклад, уявимо, що увесь аспірін, який використовується в даній клініці має єдину торгівельну марку, наприклад Regular Strength Bayer® Enteric 500 Aspirin [OTC]. Крім того, мі бажаємо вести облік усіх використань аспіріну. Це можна реалізувати за рахунок обліку усіх об" єктів класу Aspirin. Введемо означення.

Елементами класу називаються властивості, що спільно використовуються всіма об" єктами даного класу.

Елементами об" єкту називаються властивсоті, що не є спільними для всіх об" єктів класу.

Елементи класу означуються за допомогою ключового слова static. З цієї заподій сморід називаються статичнимиелементами, на відміну від елементів об" єкту, які називаються нестатичними.

Використовуючи поняття статичних елементів, маємо наступне оголошення класу Aspirin

 

class Aspirin extends IntermittentlyGivenDrug

{

static String m_sBrandName; // торгівельна назва

//.. решта означень класу

}

Якщо тепер мі змінимо значення торгівельної назви для одного об" єкту, то вона зміниться для усіх об" єктів цього ж класу:

void SomeFunc()

{

Aspirin asDrug1 = new Aspirin();

Aspirin asDrug2 = new Aspirin();

asDrug1.m_sBrandName = "Extra Strength Bayer® Enteric 500 Aspirin [OTC]";

String str = asDrug2.m_sBrandName;

// значення змінної str - "Extra Strength Bayer® Enteric 500 Aspirin [OTC]"

}




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 1229; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.