Побудова та використання класів

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

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык украинский
Дата добавления 22.12.2019
Размер файла 22,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Відкритий міжнародний університет розвитку людини «Україна»

Коледж «Освіта»

Кафедра комп'ютерної інженерії

РЕФЕРАТ

освітньо-кваліфікаційного рівня «Бакалавр»

з предмету «Об'єктно-орієнтоване програмування» на тему:

«Побудова та використання класів»

клас програмування об'єктний орієнтований

2019 р.

ПЛАН

Вступ

1. Побудова та використання класів

1.1 Основні принципи об'єктно-орієнтованого програмування

1.2 Класи та екземпляри класів

1.3 Методи класів

1.4 Інтерфейс та реалізація, спадкування реалізації

1.5 Стан об'єкта, поняття областей доступу, конструктори

1.6 Практичний підхід

Висновок

Список використаної літератури

Додаток I. Класи в мові Object Pascal (Delphi)

Додаток ІI. Класи в мові Java

Додаток ІІI. Класи в мові C++

Додаток ІV. Класи в мові C#

ВСТУП

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

1. ПОБУДОВА ТА ВИКОРИСТАННЯ КЛАСІВ

1.1 Основні принципи об'єктно-орієнтованого програмування

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

Кожний стиль програмування має свою концептуальну базу. Для об'єктно-орієнтованого стилю такою базою є об'єктна модель. Її побудова основана на використанні 3-х основних концепцій: інкапсуляція, поліморфізм та наслідування.

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

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

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

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

- моделює концептуальну структуру предметної області;

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

- забезпечує покрокове програмування великих систем, шляхом багатократної конкретизації класів.

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

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

Перевагою поліморфізму є те, що:

- він допомагає зменшити складність програм;

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

1.2 Класи та екземпляри класів

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

На основі класів можна створювати підкласи, які успадковують властивості та поведінку батьківських класів. Таким чином можна створити цілу ієрархію класів. Різні мови дещо по різному реалізовують механізм успадкування. Існує множинне та одинарне успадкування. Множинне - це, коли підклас створюється на основі кількох безпосередніх батьків (як в мові програмування C++). Одинарне успадкування - це коли клас може мати одного безпосереднього батька (як у мові програмування Java). Надкласи можуть мати свої надкласи, підкласи можуть також бути надкласами для певних класів.

1.3 Методи класів

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

1.4 Інтерфейс та реалізація, спадкування реалізації

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

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

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

1.5 Стан об'єкта, поняття областей доступу, конструктори

Однією з проблем структурного програмування, з якою бореться ООП, є проблема підтримки правильного значення змінних програми. Часто різні змінні програми зберігають логічно пов'язані значення, і за підтримання цієї логічної зв'язності несе відповідальність програміст, тобто автоматично зв'язність не підтримується. Прикладом може слугувати пара прапорців «звільнений» та «очікує премії за підсумками року», коли за правилами відділу кадрів людина може бути водночас не звільненою і не очікувати премію, або не звільненою та очікувати премію, або звільненою і не очікувати премію, але не може бути одночасно звільненою і очікувати премію. Тобто будь-яка частина програми, яка проставляє прапорець «звільнений», завжди повинна знімати прапорець «чекає премії за підсумками року».

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

В об'єктно-орієнтованій програмі прапорець «звільнений» буде оголошено приватним компонентом деякого класу, а для його читання та зміни будуть написані відповідні публічні методи. Правила, що визначають можливість або неможливість безпосередньо змінювати будь-які змінні, називаються правилами завдання областей доступу. Слова «приватний» та «публічний» в цьому випадку є так званими «модифікаторами доступу». Вони називаються «модифікаторами» тому, що в деяких мовах вони використовуються для зміни раніше встановлених прав при спадкуванні класу. Спільно класи та модифікатори доступу задають область доступу, тобто у кожної ділянки коду, залежно від того, до якого класу вона належить, буде своя область доступу щодо тих чи інших елементів свого класу та інших класів, включаючи змінні, методи, функції, константи, тощо. Існує основне правило: ніщо в одному класі не може бачити приватних елементів іншого класу. Щодо інших, більш складних правил, у різних мовах існують інші модифікатори доступу та правила їх взаємодії з класами.

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

· private (закритий, внутрішній компонент класу) - звернення до нього допускаються лише з методів того класу, у якому цей компонент визначений. Будь-які спадкоємці класу вже не зможуть отримати доступ до цього елементу. Спадкування за типом private забороняє доступ з дочірнього класу до всіх компонентів батьківського класу, включаючи навіть public-елементи (як у С++);

· protected (захищений, внутрішній елемент ієрархії класів) - звернення до компонента допускаються з методів того класу, у якому він визначений, а також з будь-яких методів його класів-спадкоємців. Спадкування за типом protected робить всі public-елементи батьківського класу protected-елементами класу-спадкоємця (С++);

· public (відкритий елемент класу) - звернення до нього допускаються з будь-якого коду. Спадкування за типом public не міняє модифікаторів батьківського класу (С++).

Проблема підтримки правильного стану змінних актуальна і для вихідного моменту виставлення початкових значень. Для цього в класах передбачені спеціальні методи/функції, звані конструкторами. Жоден об'єкт (екземпляр класу) не може бути створений інакше, як шляхом виклику на виконання коду конструктора, який поверне викликаючій стороні створений та правильно заповнений примірник класу. У багатьох мовах програмування тип даних «структура», як і клас, може містити змінні та методи, але екземпляри структур, залишаючись просто розміченими ділянками оперативної пам'яті, можуть створюватися в обхід конструкторам, що заборонено для примірників класів (за винятком спеціальних виняткових методів обходу всіх подібних правил ООП, передбачених в деяких мовах та платформах). У цьому виявляється відмінність класів від інших типів даних, адже виклик конструктора є обов'язковим.

1.6 Практичний підхід

У сучасних об'єктно-орієнтованих мовах програмування (в тому числі в Php, Java, C++, Oberon, Python, Ruby, Smalltalk, Object Pascal) створення класу зводиться до написання деякої структури, що містить набір полів та методів (серед останніх особливу роль грають конструктори, деструктори, фіналізатори). Практично клас може розумітися як якийсь шаблон, за яким створюються об'єкти - екземпляри цього класу. Усі примірники одного класу створені за одним шаблоном, тому мають один і той же набір полів та методів.

ВИСНОВОК

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

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

1. Мейєр Б.: «Об'єктно-орієнтована побудова програмного забезпечення», 2-е видання, Прентис Холл, 1997 р.;

2. Румбо «Об'єктно-орієнтоване моделювання та дизайн», Прентис Холл, 1991 р.;

3. Абаді М., Карделлі Л.: «Теорія предметів», Спрингер, виправлена редакція 23 квітня 1998 р.;

4. Іан Г.: «Об'єктно-орієнтовані методи. Принципи та практика = Object-Oriented Methods: Principles & Practice», 3-є видання, М.: «Вільямс», 2004 р.;

5. https://studfile.net/preview/5851327/page:11/;

6. https://uk.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%81_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F).

ДОДАТОК I.

Класи в мові Object Pascal (Delphi)

На мові Delphi клас описується таким чином:

TMyClass = class(TObject)

private

{Описані в цій секції елементи не доступні ззовні (за межами класу, але доступні в межах модуля).}

{Тут зазвичай знаходяться поля класу.}

protected

{Описані в цій секції елементи доступні лише класу і всім його нащадкам.}

public

{Описані в цій секції елементи доступні всім.}

published

{Описані в цій секції елементи доступні всім і відображаються в Object Inspector'e.}

end;

· TMyClass - ім'я класу;

· class - ключове слово, що починає визначення класу (в старих версіях також було ключове слово object);

· TObject - клас-предок, якщо є спадкування;

· private, protected, public, published - ключові слова, що визначають ієрархічний доступ до полів та методів у вигляді позначення секцій областей видимості.

Створюється екземпляр (об'єкт) класу так:

MyClass:= TMyClass.Create;

Знищується так:

FreeAndNil(MyClass);

або так:

MyClass.Free;

ДОДАТОК ІI.

Класи в мові Java

Визначення класу на мові Java за допомогою оператора class:

class MyClass {

String name = "Example";

// "Конструктор"

public MyClass(String name) {

this.name = name;

}

// "Метод"

public String getName() {

return name;

}

}

Створення екземпляра класу:

MyClass my = new MyClass("Example 2");

Знищення екземпляра класу відбувається за допомогою «збирача сміття» автоматично.

ДОДАТОК ІІI.

Класи в мові C++

Клас у мові C++ створюється таким чином:

class MyClass: public ParentClass // ParentClass - клас-предок, якщо такий є

{

public:

// елементи в цій секції доступні з будь-якої частини програми

MyClass(); // конструктор

~MyClass(); // деструктор

protected:

// елементи в цій секції доступні з класу і його нащадків

private:

// елементи в цій секції доступні лише з класу; це область доступу за умовчанням

};

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

MyClass myinstance;

Звернення до елементів класу:

myinstance.classmember

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

ДОДАТОК ІV.

Класи в мові C#

Класи в мові C # визначаються таким чином:

public class MyClass

{

//Елемент, доступний будь-якому класу програми

public int k;

//Елемент, доступний будь-якому класу в тому ж модулі програми

internal int l;

//Елемент, доступний будь-якому класу в тому ж модулі програми або лише поточним класу і всім його підкласам в іншому модулі

protected internal int m;

//Елемент, доступний лише поточним класу і всім його підкласам

protected int n;

//Елемент, доступний лише з поточного класу (за замовчуванням).

private int p;

}

На відміну від C++ модифікатори доступу повинні вказуватися для кожного елемента окремо. Анонімні класи можна визначити в методі, наприклад, так:

public void DoSomething()

{

var person = new

{

Name = "Маргарита";

Age = 15;

}

var pet = new

{

Name = "Катя";

Type = "Черепаха";

Owner = person;

}

Console.WriteLine("Age of pet owner:" + pet.Owner.Age);

}

Размещено на Allbest.ru

...

Подобные документы

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

    курсовая работа [211,3 K], добавлен 19.08.2010

  • Концепції об'єктно-орієнтованого програмування. Конструктори та деструктори. Успадкування класів. Побудова об’єктної моделі. Визначення об'єктів та класів і зв’язків між ними. Реалізація програми в середовищі Visual Studio C++. Інтерфейс програми.

    курсовая работа [743,7 K], добавлен 25.01.2016

  • Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.

    курсовая работа [98,0 K], добавлен 06.05.2014

  • Розгляд особливостей мови програмування С++: основні можливості, характеристика функцій. Аналіз файлів з вхідними даними. Використання похідних класів як ефективний засіб об’єктно-орієнтованого програмування. Способи роздруківки графічного вирішення.

    курсовая работа [510,9 K], добавлен 14.03.2013

  • Аналіз сучасного стану технологій програмування. Засоби реалізації об'єктів в мові C++, структура даних і функцій. Розробка програмного продукту - гри "трикутники", з використовуванням моделей, класів і функцій об’єктно-орієнтованого програмування.

    курсовая работа [117,8 K], добавлен 14.03.2013

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Визначення поняття автоматизації та інформаційної технології. Вибір мови програмування, аналіз бібліотеки класів та системи масового обслуговування. Реалізація інтерфейсу програми Visual C# 2010 Express. Діаграма класів до основних функцій программи.

    курсовая работа [1,5 M], добавлен 28.04.2012

  • Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

    курсовая работа [69,4 K], добавлен 14.03.2013

  • Ключові поняття мови об’єктно-орієнтованого програмування C++: інкапсуляція, наслідування, абстракція, поліморфізм. Об’ява класів у мові С++. Графічні засоби. Пошук відстані між точками. Опис класів і об’єктів. Програма графічної задачі. Лістинги файлів.

    курсовая работа [144,3 K], добавлен 14.03.2013

  • Розробка програми, яка розраховує потужність рідинного вісьсиметричного розбризкувача і демонструє основні аспекти об’єктно-орієнтованого програмування, а саме розробку класів, зв’язків між ними та такі явища як інкапсуляція, поліморфізм та спадкування.

    курсовая работа [155,4 K], добавлен 18.12.2011

  • Реалізація, за допомогою технології Windows Forms, програми обліку даних про волонтерів та подій, на які вони зареєстровані. можливості об'єктно-орієнтованого програмування. Створення класів. Методи, властивості. Використання Multiple Document Interface.

    курсовая работа [1,5 M], добавлен 02.12.2015

  • Характеристика і функції телефонних довідників. Визначення об'єктів і класів і залежностей (зв'язків) між ними. Побудова діаграми ієрархії класів. Реалізація програми в середовищі Borland Delphi. Її інтерфейс і демонстрація можливостей. Тестовий приклад.

    курсовая работа [349,3 K], добавлен 25.01.2016

  • Розробка програми для тренування швидкого десяти пальцевого набору тексту на клавіатурі за допомогою класів, які будуть містити в собі параметри об’єктів та їх методи. Аналіз об'єкту програмування. Основні принципи об'єктно-орієнтованого програмування.

    курсовая работа [1,8 M], добавлен 18.05.2017

  • Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

    курсовая работа [104,4 K], добавлен 14.03.2013

  • Цілі і завдання розробки, її предмет і актуальність. Опис предметної області, цілі і завдання програми. Вибір методу рішення, опис процесу програмування і вибір інструментальних засобів для реалізації проекту, опис вхідних та вихідних даних, інтерфейсу.

    курсовая работа [327,1 K], добавлен 01.09.2014

  • Основні принципи об’єктно-орієнтованого програмування. Типові середовища програмування та особливості мови С++. Етапи проектування БД. Розробка програмного забезпечення для реалізації створення бази відеофільмів. Основні положення та моделі БД.

    курсовая работа [2,7 M], добавлен 24.03.2011

  • Поняття об’єктно-орієнтовного програмування, поява відносин класів. Структури як складені типи даних, побудовані з використанням інших типів. Область дії класу і доступ до його елементів. Конструктор та деструктор класу. Розробка базового класу STRING.

    курсовая работа [280,9 K], добавлен 19.08.2010

  • Розроблення графічних схем класів та алгоритмів. Контрольний приклад та аналіз результатів комп’ютерної реалізації програми, її лістінг. Проектування інтерфейсу користувача. Послідовність побудування класів "Особа", "Службовець" й "Організація".

    курсовая работа [839,0 K], добавлен 16.06.2014

  • Розробка програмного додатку - гри "Jump way", яка поєднала в собі сучасні методи побудови 2D ігор. Обґрунтування вибору мови програмування. Проектування UML-діаграм класів. Користувацький інтерфейс. Програмна реалізація гри. Інструкція користувача.

    курсовая работа [1,2 M], добавлен 09.01.2017

  • Прототип об'єктно-орієнтованого програмування. Управління процесом реалізації програми. Розвиток апаратних засобів. Об'єктно-орієнтовані мови програмування. Надійність і експлуатаційні якості програм. Візуальне об’єктна-орієнтовне проектування Delphi.

    контрольная работа [28,9 K], добавлен 18.05.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.