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

email:  voronenko@54.edu.ks.ua 

Наприкінці 80-х років XX ст. програмування опинилося в досить серйозній кризі. Головна проблема полягала в тому, що складність програм стала перевищувати можливості людського інтелекту. Одній людині стало не під силу охопити розумом усі аспекти складної програми.

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

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

Об'єкт — це щось, що має якісь характеристики і те, що може виконати будь-яку функцію. 

Властивості об'єкта поділяють на:

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

якісні — такі властивості можна лише назвати. Наприклад, стать людини може бути або жіноча, або чоловіча.

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

Подія — зміна властивостей об’єкта, взаємодія між об’єктами, утворення нового об’єкта або знищення наявного об’єкта.

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

Наприклад, об’єкт прямокутник характеризується такими даними: 

1) довжина сторони а; 

2) довжина сторони Ь. 

Також для прямокутника можна визначити такі дії: 

1) знаходження периметра; 

2) знаходження площі; 

3) визначення рівності двох прямокутників, що задані довжинами своїх сторін; 

4) масштабування (збільшення або зменшення сторін прямокутника в певну кількість разів). 

Отже, прямокутник можна описати логічною структурою 

Виділяють три основні "стовпи" ООП - це інкапсуляція, успадкування і поліморфізм.

Інкапсуляція

Під інкапсуляцією розуміється приховування деталей реалізації даних і т.п. від зовнішньої сторони . Наприклад, можна визначити клас “холодильник”, який міститиме такі дані: виробник, об'єм, кількість камер зберігання, споживана потужність тощо, та методи: відкрити/закрити холодильник, включити/вимкнути, але при цьому реалізація того, як відбувається безпосередньо включення і вимкнення користувачеві вашого класу не доступна, що дозволяє її міняти без побоювання, що це може позначитися на використовуваному класі «холодильник» програмі. При цьому клас стає новим типом даних у рамках програми, що розробляється. Можна створювати зміни цього нового типу, такі змінні називаються об'єктами.

Успадкування

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

Прикладом базового класу, що демонструє успадкування, можна визначити клас "автомобіль", що має атрибути: маса, потужність двигуна, обсяг паливного бака та методи: завести та заглушити. У такого класу може бути нащадок - "вантажний автомобіль", він міститиме ті ж атрибути та методи, що і клас "автомобіль", і додаткові властивості: кількість осей, потужність компресора і т.п.

Поліморфізм

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

Створення об'єктів графічного інтерфейсу

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

• програма відкривається у вікні, розмір якого, як правило, можна змінювати;

• графічний інтерфейс програми, який містить зображення значків, меню, кнопки, текстові поля тощо, дає змогу користувачеві за допомогою миші виконувати потрібні команди, змінювати значення властивостей об’єктів і вводити за допомогою клавіатури текстові та числові дані;

• усі об’єкти, які використано у програмі, мають властивості, що їх можна змінювати;

• події, які відбуваються у програмі, пов’язані з певними об’єктами. Наприклад, з об’єктом меню програми пов’язана подія, яка викликається натисненням лівої кнопки миші на обраному розділі — розгорнути список вказівок, що об’єднані в цьому розділі меню.

У програмному коді, що орієнтований на опрацювання подій, програміст повинен вказати, як слід реагувати на різні події (чи дії користувача). Це можуть бути, наприклад, такі події: вибір вказівки, клацання кнопкою миші, переміщення миші тощо.

Для того щоб створити об’єкти графічного інтерфейсу мовою програмування Python, можна використати модуль підключення команд для створення графічного інтерфейсу tkinter або easygui.

Створення об’єктів програми, їх розташування та запуск опрацювання подій програми задаються командами мови програмування.

Стандартні команди мови Python можна доповнити додатковими командами, які об’єднано в модулі. Модуль у Python — це спосіб надання деякого коду для використання у програмі. Щоб підключити додатковий модуль до програми, застосовують таку конструкцію:

import назва_модуля

Модулі оголошуються на початку програми.

Доступ до команди додаткового модуля здійснюють за шаблоном: назва_модуля.команда.

Що таке Tkinter

Tkinter – це пакет Python, призначений для роботи з бібліотекою Tk. Бібліотека Tk містить компоненти графічного інтерфейсу користувача (graphical user interface – GUI). Ця бібліотека написана мовою програмування Tcl.

Під графічним інтерфейсом користувача (GUI) маються на увазі всі ті вікна, кнопки, текстові поля для введення, скроллери, списки, радіокнопки, прапорці та ін., які ви бачите на екрані, відкриваючи ту чи іншу програму. Через них ви взаємодієте з програмою та керуєте нею. Всі ці елементи інтерфейсу називатимемо віджетами (widgets).

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

Існує безліч бібліотек GUI, серед яких Tk не найпопулярніший інструмент, хоча за його допомогою написано чимало проектів. Він був обраний для Python за замовчуванням. Інсталяційний файл інтерпретатора Пітона зазвичай включає пакет tkinterу складі стандартної бібліотеки.

Tkinter можна подати як перекладач з мови Python на мову Tcl. Ви пишете програму на Python, а код модуля tkinterперекладає ваші інструкції на мову Tcl, яку розуміє бібліотека Tk.

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

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

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

Створити нове вікно можна за допомогою спеціального модуля tkinter.

Для запуску циклу опрацювання подій у модулі tkinter використовують метод mainloop()

Виклик метода здійснюють конструкцією: Ім’я_об’єкта.Ім’я_методу 

Об’єкт вікно має свої властивості: назва, розмір, розміщення, їх можна змінити у програмі вбудованими методами. 

Їх можна змінити у програмі вбудованими методами. 

Наприклад,  

title — заголовок вікна;  

geometry — встановлює геометрію вікна у форматі ширинависота + x + y. 

Наприклад, geometry ("600x400 + 40 + 80") означає таке: помістити вікно в точку з координатами (40,80) і встановити розмір (600, 400). Розмір або координати можна не вказувати;  geometry("600x400") — лише змінити розмір;  geometry("+ 40 + 80") — лише перемістити вікно. 

Властивості об’єкта «вікно»

title() – назва вікна

geometry() – розмір вікна

configure() – налаштування

mainloop() – відображення