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


 

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

41970. Функції введення/виведення printf(), scanf(). Лінійні обчислювальні процеси 14.14 KB
  Обладнання: ПКПО Borlnd C Хід роботи Вивчити теоретичні відомості Ознайомитися з форматом функцій printf і scnf.h void min { long ; double b; unsigned c; flot d; cout Вводите n ; cin b c d; cout Long n ; printf 16.5d ; printf n double n ; printf 16.
41971. Обчислювальний процес, що розгалужується, з різними логічними умовами: оператор if... else, умовна операція (?:), оператор switch, оператор break, оператор goto 23.72 KB
  else умовна операція : оператор switch оператор brek оператор goto Ціль роботи: Вивчити реалізацію в мові ветвящихся обчислювальних процесів . Навчитися писати програми використовуючи оператори: розгалуження if.else переключення switch у парі з оператором brek оператор переходу goto тернарную умовну операцію .
41972. Розробка програм з циклічними обчислювальними процесами 44.87 KB
  Розробка програм з циклічними обчислювальними процесами Ціль роботи: Вивчити написання програм мовою С, використовуючи ітераційні (циклічні) методи, освоїти основні оператори, що підтримують роботу з циклами (for, while, do... while). Навчитися писати програми, використовуючи дані оператори.
41973. ПОБУДОВА ОПТИМАЛЬНОГО НЕРІВНОМІРНОГО КОДУ ЗА МЕТОДИКОЮ ХАФФМАНА 53.47 KB
  0 проводиться перехід до побудови дерева коду за допомогою проміжних вузлів. 161 00074 3 В 893 00412 21 Х 156 00072 11 Л 745 00344 29 Ю 148 00068 16 Р 699 00322 22 Ц 126 00058 №п п Символ ni pi №п п Символ ni pi 12 М 656 00303 25 Щ 108 00050 10 К 574 00265 24 Ш 60 00028 5 Д 507 00234 28 Э 59 00027 26 Ы 467 00215 20 Ф 30 00014 19 У 399 00184 8 З 4 00002 Дерево коду за методикою Хаффмана: Визначаємо ентропію джерела за формулою: Визначаємо максимальний ступінь стиснення інформації: Середня довжина кодової комбінації:...
41976. Изучение методики процедурного программирования в СУБД 903.17 KB
  Изучение управленческих конструкций IFEndIF и IIF. Изучение конструкций построения циклов For EndFOR. Изучение управленческих конструкций IFEndIF и IIF.
41977. Численное дифференцирование и интегрирование 1.37 MB
  Вычислить интеграл по формуле прямоугольников используя для оценки точности двойной просчет при n1= 8 и n2=10. По формуле левых прямоугольников получим I1=h0126.72062243; По формуле правых прямоугольников находим I2=h 6.15576821; Работа 3 Задание: 1 Вычислить интеграл по формуле трапеций с тремя десятичными знаками.
41978. Исследование объемов передаваемой информации в каналах волоконно-оптических систем связи 15.28 KB
  Целью работы является исследование энергетического потенциала и пропускной способности волоконнооптического канала системы с технологией DWDM. Для предложенной технологии задан набор исходных параметров который включает в себя частотные пространственноэнергетические и технологические параметры системы обозначены зеленым цветом. Задание к лабораторной работе Для предложенной технологии волоконнооптической системы согласно номеру рабочего места исследовать характеристики системы по всем этапам расчета при заданном наборе исходных...