69111

Основні концепції об’єктно-орієнтованої методології програмування. Базові поняття об’єктна-орієнтованого програмування. Класи і об’єкти в мові Pascal

Лекция

Информатика, кибернетика и программирование

Методологія об’єктно-орієнтованого програмування виникла як результат природної еволюції мов структурного програмування. 3 погляду цієї методології програма є сукупністю об’єктів, кожен об’єкт є екземпляром певного класу, а класи утворюють ієрархію успадкування

Украинкский

2014-09-30

79.5 KB

9 чел.

Лекція 20.Тема: Основні концепції об’єктно-орієнтованої мед отології програмування.

                            Базові поняття об’єктна-орієнтованого програмування.Класи і об’єкти в мові Pascal.

План:

1. Основні концепції об'єктно-орієнтованої методології програмування

2. Базові поняття об'єктно-орієнтованого програмування

3. Класи і об'єкти в мові Раsсаl

1. Основні концепції об'єктно-орієнтованої методології програмування

Методологія об'єктно-орієнтованого програмування виникла як результат природної еволюції мов структурного програмування. 3 погляду цієї методології програма є сукупністю об'єктів, кожен об'єкт є екземпляром певного класу, а класи утворюють ієрархію успадкування [4].

2. Базові поняття об'єктно-орієнтованого програмування

Пояснимо поняття, що були використані у визначенні об'єктно-орієнтованої методології. Об'єкт — це реальна або абстрактна сутність, яка моделює частину навколишньої дійсності. Отже, кожний реальний предмет — це об'єкт. Прикладами реальных об'єктів є автомобіль, літак, завод, людина, матриця, вектор тощо. Ті самі слова: «автомобіль», «літак», «людина» тощо позначають не об'єкти, а класи, коли йдеться не про конкретний автомобіль, літак або людину, а, наприклад, про автомобиль або літак як різновид транспортного засобу і про людину як біологічний вид. Отже, клас є абстракцією множини об'єктів, що мають спільні властивості і поведінку. Транспортний засіб і біологічний вид — це теж класи. Відношення між літаком і транспортним засобом або між видом «homo sapiens» і біологічним видом взагалі є відношенням успадкування, або відношенням «є» (англ. «is а»): літак є різновидом транспортного засобу, вид «homo sapiens» є різновидом біолгічного виду. Коли клас В є різновидом класу А, то А називається класом-предком, В — класом-нащадком.

3 погляду програмування об'єкт складається з атрибутів і методів. Атрибути описують властивості об'єкта у певний момент часу, методи — властиву для об'єкта поведінку. Всі об’єкти, що є екземплярами одного класу, мають однаковий набір атрибутів і методів. Значення атрибутів зберігаються в змінних, а дії методів описуються в процедурах або функціях. Тому клас може бути визначений як набір оголошень змінних-атрибутів і підпрограм-методів. Визначені всередині класу елементи даних називаються змінними-членами класу, процедури і функції – функціями-членами, або методами класу. Оголошення класу називається його інтерфейсом, а опис його методів – реалізацією. Як правило, інтерфейс класу відокремлюється від його реалізації.

Об’єктно-орієнтоване програмування ґрунтується на трьох концепціях: інкапсуляції, успадкування і поліморфізму. Інкапсуляція – це механізм, який дозволяє захистити атрибути й методи від некоректного використання. Згідно з принципами інкапсуляції атрибути класу не можуть бути доступними для екземплярів інших класів безпосередньо. Доступ до атрибутів має здійснюватися лише через методи класу. Наприклад, доступ до двигуна автомобіля можна здійснити лише за допомогою методів «завести», «вимкнути», «перемкнути швидкість» тощо. Саме эавдяки інкапсуляції можна отримати зиск у разі відокремлення інтерфейсу класу від його реалізації. Адже інкапсуляція дає можливість зробити програми, що використовують об'єкти певного класу, незалежними від способу реалізації цього класу.

Успадкування дозволяє систематизувати подібні класи на підставі їх спільних властивостей. Клас, що містить атрибути, методи, спільні для групи подібних один до одного класів, називається базовим класом, або класом-предком. Класи, що успадковують властивості і функціональні особливості базового класу, називаються похідними класами, або класами-нащадками. Як уже зазначалося, успадкування застосовують для класів, пов'язаних семантичним відношенням «є». Іншими словами, вважається, що екземпляр похідного класу водночас є екземпляром базового класу. Це дає можливість об'єктам-нащадкам використовувати атрибути і методи об'єктів-предків як свої власні (хоча слід зазначити, що деякі мови програмування, наприклад С++, дозволяють встановлювати обмеження на доступ до атрибутів і методів предків з боку методів нащадків). Найважливішою властивістю успадкування є те, що воно дає можливість уникнути повторень коду, адже спільний для множини подібних класів код може бути винесений в методи їх спільного предка. За допомогою механізму успадкування можна побудувати ієрархію класів.

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

3. Класи і об'єкти в мові Раsсаl

Наведемо синтаксис оголошення класу в мові Раsсаl. Зазначимо, клас називається об'єктним типом даних і позначається ключовим словом object.

type     <ім’я об’єктного типу> =object

<оголошення атрибутів>;

<заголовки методів>;

 еnd;

Тут <ім’я об’єктного типу> - довільний ідентифікатор; object - слово, зарезервоване для позначення об'єктного типу даних; <оголошення атрибутів> — перелік оголошень змінних будь-яких припустимих типів; <заголовки методів> — заголовки будь-яких процедур або функцій.

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

var <ім’я змінної-екземпляра>: <ім’я об’єктного типу>;

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

procedure <ім’я об’єктного типу>.<ім’я процедури (параметри)>;

begin

  {иіло процедури}

end;

function <ім’я об’єктного типу>.<ім’я функції (параметри)>:<тип>;

begin

  {тіло функції}

end;

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

<ім’я змінної-екземпляра>.<ім’я методу>(<список аргументів>)

Так само здійснюється доступ до атрибутів об’єктів певного класу з методів іншого класу:

<ім’я змінної-екземпляра>.<ім’я атрибуту>

Отже, призначення методів – реалізація дій над елементами даних об’єктного типу. Методи об’єктного типу мають прямий доступ до атрибутів цього типу, оскільки вони містяться в одній області видимості. Тому, коли метод звертається до атрибутів того об’єктного типу, якому належить він сам, складені імена не використовуються.

Приклад 6.8.

Розробимо об’єкт «вектор», атрибутами якого є одновимірний масив і його розмірність (масиви розглядатимуться в розділі 7). Опишемо такі методи об’єктного типу, як ініціалізація та відображення вектора, а також обчислення скалярного добутку двох векторів.

Unit Unit6_2;       {модуль (файл unit6_2. pas)}

interface       {розділ інтерфейсу}

uses crt;

type

  mas=array[1..10] of integer;

  vector=object;      {об’єктний тип vector }

     n: integer;       {розмірність вектора}

     vec: mas;       {значення елементів вектора}

     name: char;      {ім’я вектора}

     procedure init (ch: char);     {ініціалізація даних}

     procedure showvec (ch: char);    {відображення значень елементів}

     procedure scalar (v: vector);    {скалярне множення векторів}

  end;

implementation      {розділ реалізації методів}

{--------------------------------- метод ініціалізації вектора ---------------------------------}

procedure vector, init (ch: char);

  var i: integer;

  begin

     name: char;

     write (‘input the number of vector’, name, ‘components:’);

     readln (n);

     writeln (‘input’, n, ‘components’);

     for i:=1 to n do

        read (vec[i]);

     end;

{--------------------------------- метод виведення вектора ---------------------------------}

procedure vector, showvec (ch: char);

var i: integer;

begin

  name: char;

  writeln (‘vector’, name, ‘ : ’);

  for i:=1 to n do write (vec[i], ‘ ’);

  writeln;

end;

{---------------------- метод обчислення скалярного добутку векторів ----------------}

procedure vector, scalar (v: vector); {v – екземпляр об’єктного типу }

var sum,       {скалярний добуток векторів}

     i: integer;       {параметр циклу}

begin

if n<>v.n then begin      {коли розмірності векторів різні}

  writeln (‘scalar product is not computable: ’);

  writeln (‘vector lengths are different’);

  readln;

  exit;

end

else       {коли розмірності векторів однакові}

begin

  sum:=0;

  for i:=1 to n do      {скалярний добуток векторів}

     sum:=sum+vec[i]*v.vec[i];

  writeln (‘scalar product = ’, sum);

end;

end;

end.        {кінець модуля}

program ex6_2;     {програма роботи з об’єктом «вектор»}

uses crt, Unit6_2;

var v1, v2: vector;      {об’єкти-вектори}

begin

  clrscr;

  writeln (‘create vectors’);

  v1.unit (‘A’);      {ініціалізація вектора А}

  v2.unit (‘B’);      {ініціалізація вектора В}

  v1.showvec (‘A’);      {виведення вектора А}

  v2.showvec (‘B’);      {виведення вектора В}

  v1.scalar(v2);    {обчислення скалярного добутку векторів}

end.

Висновки

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

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

Абстрагування – це спрощений опис системи, в якому зосереджують увагу на певних властивостях і деталях, а на інші не зважають.

Специфікація інтерфейсів – це формалізований опис входів, виходів і функцій, що мають бути реалізовані програмним модулем.

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

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

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

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

Модуль у мові Pascal – це програмна одиниця, що автономно компілюється в окремий бінарний файл *.tpu або *.tpw. До складу модуля можна включати оголошення констант, типів змінних, а також оголошення і реалізацію процедур і функцій. Модуль з’єднується з різними Pascal-програмами, що дає можливість використовувати у програмах ідентифікатори, оголошені в модулі.

Модуль складається із заголовка, інтерфейсної, реалізаційної й ініціалізаційної частин. Для означення модуля та його частин використовуються зарезервовані слова unit, interface, implementation.

Методологія об’єктно-орієнтованого програмування дозволяє розглядати програму як сукупність об’єктів, кожен з яких є екземпляром певного класу, а класи утворюють ієрархію успадкування.

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

Клас є абстракцією множини об’єктів, що мають спільні властивості і поведінку.

Об’єктно-орієнтоване програмування ґрунтується на концепціях інкапсуляції, успадкування і поліморфізму.

Інкапсуляція – це механізм, який дозволяє захистити атрибути і методи об’єкта від некоректного використання.

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

В об’єктно-орієнтованому програмуванні взаємодія між об’єктами здійснюється шляхом передачі повідомлень. Здатність об’єктів похідних класів по-різному реагувати на ті самі повідомлення, називається поліморфізмом.

Контрольні питання

1. Основні концепції об'єктно-орієнтованої методології програмування

2. Базові поняття об'єктно-орієнтованого програмування

3. Класи і об'єкти в мові Раsсаl


 

А также другие работы, которые могут Вас заинтересовать

22414. Отображения. Числовые функции 326.5 KB
  Отображением f множества X в множество Y называется всякое правило которое любому элементу xX ставит единственный элемент y обозначаемый fx. Бинарным отношением f между множествами X и Y называется любое подмножество множества XY. Бинарное отношение f между множествами X и Y называется отображением множества X в множество Y если для любого элемента xX существует один и только один элемент yY такой что x yf . Отображение f множества X в Y называется также функцией определенной на множестве X со значениями в множестве Y.
22415. Числовая последовательность и ее предел 211.5 KB
  Числовая последовательность и ее предел Числовая последовательность и свойства последовательностей. Числовая последовательность и свойства последовательностей. Числовой последовательность или просто последовательность называется функция f определенная на множестве натуральных чисел N значения которой числа действительные или комплексные. Последовательность обозначаем через ее значения : x1 x2 x3 xn или кратко {xn}.
22416. Предел функции 329.5 KB
  Предел функции Предел функции в точке по Коши и по Гейне. Предел функции на бесконечности. Бесконечно малые и бесконечно большие функции и их свойства. Свойства предела функции.
22417. Україна у Другій Світовій війні та першому повоєнному десятиріччі (1939 – 1955 рр.) 49 KB
  Напередодні Другої світової війни населення Західної України становило близько 7 мли осіб. На всіх цих землях панувала іноземна адміністрація, яка проводила колонізаційну політику. Це викликало обурення українців, призводило до спротиву офіційним властям
22418. Сравнения функций. Свойства функций, непрерывных на отрезке 218.5 KB
  Если предел 1 равен 0 то функция fx называется бесконечно малой более высокого порядка чем gx при x  a а функция gx называется бесконечно малой более низкого порядка чем fx при x  a. Если предел 1 равен   то функция fx является бесконечно малой болей низкого порядка чем gx при x  a а gx функция является бесконечно малой более высокого порядка чем fx при x  a. Если предел 1 равен   то функция является бесконечно большой при x  a. Тогда по свойству бесконечно малых функция бесконечно малая при...
22419. Производная и дифференциал функции одной переменной 224 KB
  Производная и дифференциал функции одной переменной Приращение аргумента и приращение функции. Понятие функции дифференцируемой в точке. Дифференциал функции. Производная функции.
22420. Теоремы о дифференцируемых функциях. Производные и дифференциалы высших порядков 246.5 KB
  Производные и дифференциалы высших порядков Возрастание и убывание функции в точке. Точки экстремума функции. Линеаризация функции. Приближенное вычисление значений функции.
22421. Правила Лопиталя. Формула Тейлора 245 KB
  Формула Тейлора. Формула Тейлора с остаточным членом в форме Пеано. Формула Тейлора с остаточным членом в форме Лагранжа. Разложение основных элементарных функций по формуле Тейлора.
22422. Исследование функции с помощью производной 216 KB
  Исследование функции с помощью производной. Возрастание и убывание функции на промежутке. Точки экстремума функции. Нахождение наибольшего и наименьшего значения функции на отрезке.