Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Оператор виведення






Для виведення значень змінних на екран монітора користуються оператором write (писати) та його різновидом writeln у такому самому форматі:

write(cписок змінних);

writeln (список змінних);

Аналогічно, після закінчення роботи оператора writeln, курсор переводиться на початок наступного рядка.

Наприклад, якщо а=5, b=7, с=1.4Е-19, d=106,

то оператори write(a); writeln(b, c); write(d);

виведуть на екран значення в такому вигляді:

5 71.4E-19

причому курсор залишається відразу за числом 106 і наступний оператор write або writeln буде продовжувати виведення в цьому самому рядку.

Звертаю увагу на те, що значення змінних a, b, c злилися і однозначно визначити що, і кому належить досить проблематично. Щоб такого не відбувалося можна виводити між змінними пропуски.

Наприклад для нашого випадку оператори

write(a, ' ‘); writeln(b, ' ‘, c); write(d);

виведуть на екран значення в такому вигляді:

5 7 1.4E-19

Виводити можна не тільки значення змінних, а й значення виразів:

write(sin(2*a*b));

Для величин, що виводяться оператором write (writeln), можна зазначати формат виведення:

1) для не REAL величин у вигляді:

writeln (величина: n)

2) для REAL величин у вигляді:

writeln (величина: n: m)

Тут ціле число n визначає кількість позицій для виведення величини. Якщо величина не вміщується у вказаний формат, цей формат ігнорується; якщо ж величина коротша від формату, то символи, що виводяться, зсуваються вправо, а зайві позиції зліва заповнюються пропусками. Це дозволяє роздруковувати на екрані значення у вигляді таблиць рівними стовбчиками. Для REAL-величин другий параметр (ціле число m) зазначає кількість десяткових знаків після десяткової крапки, що виводяться. Число виводиться в форматі з фіксованою крапкою з автоматичним округленням. Якщо m=0, то REAL-число виводиться як ціле (без крапки).

1. Одновимірні масиви

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

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

Масив – це змінна, утворена послідовністю змінних, причому:

усі вони (компоненти, або елементи масиву) мають той самий тип;

кожний компонент має свій номер у послідовності (індекс) і відрізняється ним від інших елементів(ідентифікується);

множина індексів (індексова множина) скінченна й зафіксована в означенні масиву та в процесі виконання програми не змінюється;

можливість обробки компонента, або його доступність, не залежить від його місця в послідовності (елементи рівнодоступні).

Кількість елементів індексової множини називається довжиною масиву.

Подивимося на масив із точки зору математики. Нехай компоненти масиву мають тип T, а індекси – тип I.Значенням змінної-масиву є послідовність значень типу T, занумерованих значеннями типу I. Множина всіх таких функцій утворює носій для типу, який у мові Паскаль означається виразом вигляду

array [I ] of T.

Наприклад, масив, у якому треба зберігати коефіцієнти полінома, міг би мати тип array[0 101]of real. У такому масиві 102 компоненти дійсного типу із номерами від 0 до 101. Або масив, у якому треба зберігати кількості символів, прочитаних десь, міг би мати тип array [ char ] of integer. У ньому 256 цілих змінних, а їх номерами є символи.

Типом компонентів може бути довільний тип, окрім файлів. Типом індексів I – будь-який

перелічуваний тип. Щоправда, система Бор ланд-Паскаль не дозволяє вказувати типи integer та word, а тим паче тип longint, як типи індексів. Там занадто багато елементів. Але це не страшно, оскільки система дозволяє створювати масиви навіть із ще більшою кількістю елементів.

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

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

type ART=array[0 101]of real; var A: ART;

так і

var A: array[0 101]of real;

В обох випадках змінна A складається зі 102 дійсних змінних. Вони ідентифікуються виразами A[0], A[1], …, A[101]. Або виразами вигляду A[індексовий-вираз], де індексовий-вираз має значення від 0 до 101.

. Нехай ім'я означено як масив типу array[I] of T, E – вираз типу I. Тоді вираз ім'я[E] задає елемент цього масиву, тобто змінну типу T, номер якої в масиві є значенням виразу E.

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

A[1]: =1; A[2]: = A[1]+2;

for k: = 3 to 101 do readln(A[k]);

writeln(A[1]+A[2]+A[3]+A[4]).

Індексування – це єдина операція над масивами як цілісними об'єктами. Тому обробка масивів описується через обробку їх компонентів. Щоправда, в мові Бор ланд-Паскаль можна присвоювати однотипні масиви. Наприклад, за дії означень

var a, b: array[char] of integer; ch: char;

можна замість циклу

for ch: = chr(0) to chr(255) do b[ch]: =a[ch];

написати лаконічно

b: = a;

Задачі

1)На вхід програми подається N цілих чисел X1,., XN із діапазону 0 100; N> 0. Написати програму обчислення:

- їх середнього арифметичного значення M та дисперсії D, тобто середнього арифметичного квадратів різниць між числами та M:

D = ((X1 - M)2 + … + (XN - M)2) / N;

- кількостей повторень K1, K2, …, K100 кожного з чисел 1, 2, …, 100.

Числа надходять у програму

а) від стандартного пристрою введення, тобто клавіатури;

б) від генератора випадкових чисел.

2). Черга – це така послідовність, що елементи додаються в її кінець, а вилучаються з її початку. Написати програму роботи з чергою цілих, поданою в масиві.Потрібно забезпечити:

- скидання черги (вилучення всіх її елементів);

- обчислення кількості елементів у черзі;

- перевірки, чи порожня черга;

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

- додавання елемента в кінець черги;

- добування та вилучення елемента з її початку.

3).Стек, або магазин – це така послідовність, що елементи додаються й вилучаються з її початку. Написати програму роботи зі стеком цілих, поданим у масиві. Потрібно забезпечити:

- скидання стека (вилучення всіх його елементів);

- обчислення кількості елементів стека;

- перевірки, чи порожній стек;

- обчислення обсягу вільного місця в стеку (кількість елементів, які можна додати до його заповнення);

- додавання елемента до початку стека;

- добування й вилучення елемента з початку стека.

2. Рядки

Рядок у загальному значенні цього слова – скінченна послідовність символів. У програмуванні для подання рядків використовують масиви символів.

Типи рядків мають свої специфічні операції, не означені над масивами символів, тобто рядки та символьні масиви є цілком різними типами.

Змінна-рядок є масивом символів разом із додатковим компонентом. В означенні типу задається довжина n послідовності символьних компонентів, індексованих цілими 1, …, n. Додатковий компонент указує довжину послідовності символів, поданої в масиві. Ця довжина значення-рядка може змінюватися в процесі виконання програми від 0 до довжини масиву n.

У мові Бор ланд-Паскаль тип рядків задається виразом вигляду

string[n],

де n – ціла стала з діапазону 1 255 (можливо, іменована). Наприклад, string[80]. Змінна такого типу є масивом символів із індексами від 0 до n. Значення-рядок подається змінними з індексами від 1 до n, змінна з індексом 0подає довжину рядка. Точніше, якщо її значення c, то m=ord(c) розглядається як довжина значення-рядка. У процесі виконання програми вона може мінятися від 0 до n.

Елементи масиву з індексами від m+1 до n недоступні; їх значення можна розглядати як " сміття". Спроба присвоїти щось цим елементам або взяти їх значення призведе до аварійного завершення програми.

Оскільки невід'ємна довжина значення-рядка подається в одному байті, вона не може перевищувати 255. Звідси " маємо, те що маємо", тобто обмеження 255 на довжини рядків. Ім'я типу string еквівалентне виразові string[255].

Найпростішими виразами типу рядок є ім'я змінної-рядка, рядкова стала (літерал), або вираз типу char. Над рядками означена бінарна операція катенації (або дописування); її знаком є '+'. Результат одержується дописуванням правого операнда до лівого: значенням виразу '123'+'45' є '12345'. Ціла довжина рядка повертається з виклику функції length із аргументом-рядком: length('123') = 3.

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

Вираз типу " рядок" можна присвоїти змінній-рядку. Його символи присвоюються елементам змінної, починаючи з першого. Якщо довжина значення більша максимально можливої довжини n змінної, то присвоюються лише n перших символів. При цьому довжина значення (або n) неявно присвоюється додатковому компоненту змінної-рядка (як символ нульовому елементу масиву). Наприклад, нехай змінна s означена як string[3]. Після присвоювання

s: ='12345'

чотири її компоненти з індексами 0, 1, 2, 3 матимуть значення chr(3), '1', '2', '3', а після

s: ='12'

– chr(2), '1', '2', а останній компонент буде недоступним, і його значення буде " сміттям". За останнього значення змінної s виконання оператора

s: =s+'9'

надасть їй значення '129', а оператора

s: ='9'+s

– значення '912'. В обох випадках s[0]=chr(3). Після присвоювання s: ='' змінна s подає порожній рядок:

s[0]=chr(0), а решта елементів недоступні.
Записи

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

Опис запису в мові Паскаль здійснюється за допомогою службового слова record, за яким слідує опис компоненти запису. Завершується опис запису службовим словом end.

Наприклад, телефонний довідник містить прізвища і номери телефонів, тому окремий рядок в такому довіднику зручно представити у вигляді наступного запису:

type TRec = Record FIO: String[20]; TEL: String[7] end; var rec: TRec;

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

var rec: Record FIO: String[20]; TEL: String[7] end;

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

rec.FIO, rec.TEL

Таке ім'я називається складеним. Компонентою запису може бути іще один запис, у такому випадку складене ім'я буде містити не два, а більшу кількість імен.

Звернення до компонентів записів можна спростити, якщо скористатися оператором приєднання with.

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

with rec do оператор;

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

with rec do begin FIO: ='Козак С.В.'; TEL: ='2324231'; end;

Така алгоритмічна конструкція повністю ідентична наступній:

rec.FIO: ='Козак С.В.';
rec.TEL: ='2324231';

Ініціалізація записів може проводитися за допомогою типізованих констант:

type RecType = Record x, y: Word; ch: Char; dim: Array[1..3] of Byte end; const Rec: RecType = (x: 127; y: 255; ch: 'A'; dim: (2, 4, 8));

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

Наприклад, побудуємо запис, в якому ми будемо зберігати дані про деяку геометричну фігуру (відрізок, трикутник, коло).

typeTFigure = record type_of_figure: string[10]; color_of_figure: byte;... case integer of 1: (x1, y1, x2, y2: integer); 2: (a1, a2, b1, b2, c1, c2: integer); 3: (x, y: integer; radius: word); end; var figure: TFigure;

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

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

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

 

Об'є́ ктно-орієнто́ ване програмува́ ння (ООП) — одна з парадигм програмування, яка розглядає програму як множину «об'єктів», що взаємодіють між собою. Основу ООП складають три основні концепції: інкапсуляція, успадкування та поліморфізм. Одною з переваг ООП є краща модульністьпрограмного забезпечення (тисячу функцій процедурної мови, в ООП можна замінити кількома десятками класів із своїми методами). Попри те, що ця парадигма з'явилась в 1960-тих роках, вона не мала широкого застосування до 1990-тих, коли розвиток комп'ютерів та комп'ютерних мереж дозволив писати надзвичайно об'ємне і складне програмне забезпечення, що змусило переглянути підходи до написання програм. Сьогодні багато мов програмування або підтримують ООП (PHP, Lua) або ж є цілком об'єктно-орієнтованими (зокрема, Java, C#, C++, Python, Ruby та Objective-C, ActionScript 3, Swift, Vala).

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

На відміну від традиційних поглядів, коли програму розглядали як набір підпрограм, або як перелік інструкцій комп'ютеру, ООП програми можна вважати сукупністю об'єктів. Відповідно до парадигми об'єктно-орієнтованого програмування, кожний об'єкт здатний отримувати повідомлення, обробляти дані, та надсилати повідомлення іншим об'єктам. Кожен об'єкт — своєрідний незалежний автомат з окремим призначенням та відповідальністю[2].

Зміст

[сховати]

· 1Визначення ООП

· 2Історія

· 3Фундаментальні поняття

o 3.1Прототипно-орієнтоване програмування

· 4Критика

· 5Примітки

· 6Література

· 7Див. також

Визначення ООП[ред. • ред. код]

Об'єктно-орієнтоване програмування - це метод програмування, заснований на поданні програми у вигляді сукупності взаємодіючих об'єктів, кожен з яких є екземпляром певного класу, а класи є членами певної ієрархії наслідування.[3]. Програмісти спочатку пишуть клас, а на його основі при виконанні програми створюються конкретні об'єкти (екземпляри класів). На основі класів можна створювати нові, які розширюють базовий клас і таким чином створюється ієрархія класів.

На думку Алана Кея, розробника мови Smalltalk, якого вважають одним з «батьків-засновників» ООП, об'єктно-орієнтований підхід полягає в наступному наборі основних принципів:

· Все є об'єктами.

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

· Кожен об'єкт має незалежну пам'ять, яка складається з інших об'єктів.

· Кожен об'єкт є представником (екземпляром, примірником) класу, який виражає загальні властивості об'єктів.

· У класі задається поведінка (функціональність) об'єкта. Таким чином усі об'єкти, які є екземплярами одного класу, можуть виконувати одні й ті ж самі дії.

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

Таким чином, програма являє собою набір об'єктів, що мають стан та поведінку. Об'єкти взаємодіють використовуючи повідомлення. Будується ієрархія об'єктів: програма в цілому — це об'єкт, для виконання своїх функцій вона звертається до об'єктів що містяться у ньому, які у свою чергу виконують запит шляхом звернення до інших об'єктів програми. Звісно, щоб уникнути безкінечної рекурсії у зверненнях, на якомусь етапі об'єкт трансформує запит у повідомлення до стандартних системних об'єктів, що даються мовою та середовищем програмування. Стійкість та керованість системи забезпечуються за рахунок чіткого розподілення відповідальності об'єктів (за кожну дію відповідає певний об'єкт), однозначного означення інтерфейсів міжоб'єктної взаємодії та повної ізольованості внутрішньої структури об'єкта від зовнішнього середовища (інкапсуляції).

Історія[ред. • ред. код]

ООП виникло в результаті розвитку ідеології процедурного програмування, де дані і підпрограми (процедури, функції) їх обробки формально не пов'язані. Для подальшого розвитку об'єктно-орієнтованого програмування велике значення мають поняття події(так зване подієво-орієнтоване програмування) і компоненти (компонентне програмування, КОП).

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

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

Першою мовою програмування, в якій були запропоновані принципи об'єктної орієнтованості, була Симула. На момент своєї появи (в [[1967 році), ця мова програмування запропонувала революційні ідеї: об'єкти, класи, віртуальні методи тощо, однак це все не було сприйнято сучасниками як щось грандіозне. Тим не менше, більшість концепцій були розвинені Аланом Кеєм таДеном Інгаллсом у мові Smalltalk. Саме вона стала першою широко поширеною об'єктно - орієнтованою мовою програмування.

В даний час кількість прикладних мов програмування (список мов), що реалізують об'єктно -орієнтовану парадигму, є найбільшим по відношенню до інших парадигм. В області системного програмування до сих пір застосовується парадигма процедурного програмування, і загальноприйнятою мовою програмування є мова C. Хоча при взаємодії системного і прикладного рівнів операційних систем стали помітно впливати мови об'єктно-орієнтованого програмування. Наприклад, однією з найпоширеніших бібліотек мультиплатформовий програмування є об'єктно-орієнтована бібліотека Qt, написана мовою C++.

Фундаментальні поняття[ред. • ред. код]

В результаті дослідження Дебори Дж. Армстронг (англ. Deborah J. Armstrong)[4] комп'ютерної літератури, що була видана протягом останніх 40 років, вдалось відокремити фундаментальні поняття (принципи), використані у переважній більшості визначень об'єктно-орієнтованого програмування. До них належить:

Клас

Клас визначає абстрактні характеристики деякої сутності, включаючи характеристики самої сутності (її атрибути або властивості) та дії, які вона здатна виконувати (її поведінки, методи або можливості). Наприклад, клас Собака може характеризуватись рисами, притаманними всім собакам, зокрема: порода, колір хутра, здатність гавкати. Класи вносятьмодульність та структурованість в об'єктно-орієнтовану програму. Як правило, клас має бути зрозумілим для не-програмістів, що знаються на предметній області, що, у свою чергу, значить, що клас повинен мати значення в контексті. Також, код реалізації класу має бути досить самодостатнім. Властивості та методи класу, разом називаються його членами.

Об'єкт

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

Метод

Можливості об'єкта. Оскільки Сірко — Собака, він може гавкати. Тому гавкати() є одним із методів об'єкта Сірко. Він може мати й інші методи, зокрема: місце(), або їсти(). В межах програми, використання методу має впливати лише на один об'єкт; всі Собаки можуть гавкати, але треба щоб гавкав лише один окремий собака.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.