Навчіться програмувати в Delphi - складання калькулятора

Object Pascal

Автор: Ваннери

Ласкаво просимо до останнього епізоду серії «Навчись програмувати з початком». У перших чотирьох епізодах ми висвітлювали “Вступ та інсталяцію” безкоштовного видання Delphi Starter, а потім ми перейшли до основ IDE у “Створення в налагодженні”. У “Архітектурі та рівнях коду” були обговорені ключові концепції належної структури додатків, і в останньому епізоді ми розпочали “Проектування користувальницьких інтерфейсів”.

Існує також серія "Навчись програмувати на C ++", написана менеджером з продуктів C ++ Builder Девідом Міллінгтоном, який уже закінчив серію останньою публікацією в блозі, що охоплює оператори C ++ та остаточну заявку.

Кодування в C ++ та Object Pascal відрізняється. Спочатку я мав спокусу застосувати тут калькулятор по-своєму, але я зрозумів, що деяким розробникам може бути цікаво мати можливість порівняти, як ці дві мови можуть бути використані для реалізації того самого інтерфейсу та дизайну коду. Отже, я трохи змінив інтерфейс користувача калькулятора, який я створив у попередньому епізоді, щоб він відповідав Давидові.

Остаточний вихідний код проекту “Delphi Super Calculator” можна завантажити з мого Amazon S3.

Структура програми

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

У попередньому епізоді ми створили проект калькулятора з основною формою з 20 кнопками та міткою, яка виконує роль "дисплея". Дуже важливо відокремити код інтерфейсу користувача від логіки програми. Найкращий спосіб досягти цього розділення - використання інтерфейсів. Намагаючись відповідати дизайну Девіда, я додав до свого проекту новий блок "uInterfaces" і визначив там два інтерфейси. Один «ICalculator», який реалізує мій клас «TCalculator», і один «ICalculatorDisplay», який реалізований основною формою. Ці два інтерфейси є єдиним способом взаємодії інтерфейсу користувача з логікою програми.

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

Наш клас “TCalculator” реалізує інтерфейс, і тому його не можна успадкувати безпосередньо від “TObject”, але його потрібно отримати від “TInterfacedObject”, який є базовим класом для всіх класів Delphi, що реалізує інтерфейси. Якщо ви не вказали базовий клас для свого об'єкта, ви будете успадковувати від “TObject”. Подібно всі інтерфейси Delphi походять від “IInterface”, а клас “TInterfacedObject” просто реалізує ці успадковані методи. Конструктор нашого класу “TCalculator” бере посилання на “ICalculatorDisplay” і зберігає його у приватному полі, тому в будь-який час, коли калькулятору потрібно щось відобразити, він може просто викликати метод “UpdateUI” і передати рядок, що відображатиметься. Це хороший дизайн. Клас калькулятора знає про користувальницький інтерфейс якомога менше. Він просто повинен мати можливість передавати рядок для відображення. Це може бути FireMonkey, VCL або, можливо, навіть консольний додаток.