Урок 1. Концепции объектно-ориентированного программирования C#
Это первая статья в серии статей, описывающих использование методов объектно-ориентированного программирования, реализованных на языке программирования C#.
Что такое объектно-ориентированное программирование?
Поскольку компьютеры увеличивают вычислительную мощность, программное обеспечение, которое они выполняют, становится более сложным. Эта повышенная сложность возникает за счет больших программ с огромными файлами исходных кодов, которые могут быстро стать трудными для понимания, обслуживания и сохранения без ошибок.
Объектно-ориентированное программирование (ООП) пытается решить эту проблему, создавая сети объектов, каждый из которых похож на небольшую программную "машину". Эти объекты, естественно, являются более мелкими сущностями, упрощая задачу разработки каждого блока. Однако, когда объекты взаимодействуют в системе, они становятся строительными блоками гораздо более сложного решения.
Рассмотрим автомобиль. Если бы автомобиль был спроектирован как единая машина, он рассматривался бы как чрезвычайно сложный с множеством возможностей для отказа. Однако при разбиении на его составные части, такие как колеса, педали, двери и т.д. отдельные элементы дизайна становятся проще. Каждая деталь (или объект) создается самостоятельно, тщательно тестируется и затем собирается в конечный продукт. Создание деталей может быть упрощено еще больше, когда они разбиты на еще более простые элементы. Например, когда каждая дверь рассматривается как состоящая из внешней панели, ручки, внутренней панели и окна.
Пример автомобиля аналогичен объектно-ориентированному программному обеспечению. Вместо того, чтобы писать огромную программу для создания, например, системы управления проектами, решение разбивается на реальные части, такие как проект, задача, оценка, фактический результат и т. д. Каждый из них затем может быть разработан и протестирован независимо друг от друга, прежде чем быть объединены.
Основные принципы
В этом учебнике описывается использование объектно-ориентированных методов с использованием языка программирования C#. Прежде чем мы начнем изучать любой пример кода, важно рассмотреть идеи, которые будут обсуждаться. Некоторые из ключевых понятий описаны в следующих разделах.
Классы и объекты
Основными строительными блоками объектно-ориентированного программирования являются класс и объект. Класс определяет доступные характеристики и поведение множества подобных объектов и определяется программистом в коде. Класс - это абстрактное определение, которое становится конкретным во время выполнения, когда объекты, основанные на классе, создаются и принимают поведение класса.
В качестве аналогии рассмотрим понятие класса "транспортное средство". Класс, разработанный программистом, будет включать такие методы, как Steer (), Accelerate() и Brake() . Этот класс будет также включать такие свойства, как цвет, число дверей, максимальная скорость и число колес. Класс - это абстрактный дизайн, который становится реальным, когда создаются такие объекты, как автомобиль, гоночная машина, танк и трехколесный велосипед, каждый со своей собственной версией методов и свойств класса.
Инкапсуляция
Инкапсуляция, также известная как сокрытие данных, является важной концепцией объектно-ориентированного программирования. Это акт сокрытия функциональности класса таким образом, что внутренние операции скрыты и не имеют отношения к программисту. При правильной инкапсуляции разработчику не нужно понимать, как на самом деле работает класс, чтобы взаимодействовать с ним через его общедоступные методы и свойства; известный как его открытый интерфейс.
Инкапсуляция необходима для создания обслуживаемых объектно-ориентированных программ. Когда при взаимодействии с объектом используется только общедоступный интерфейс методов и свойств, класс объекта становится правильно выделенной единицей. Этот блок можно после этого заменить независимо для того чтобы исправить ошибки, изменить внутреннее поведение или улучшить функциональность или представление.
В аналогии с автомобилем это похоже на замену лампочки фары. До тех пор, пока мы выбираем правильный размер лампы и подключение (публичный интерфейс), он будет работать в автомобиле. Это не имеет значения, если производитель изменил или внутреннее устройство колбы отличается от оригинала. Он может даже предложить улучшение яркости!
Обмен сообщениями
Обмен сообщениями описывает взаимодействие между объектами с помощью их общих интерфейсов. Существует три основных способа передачи сообщений. Они используют методы, свойства и события. Свойство может быть определено в классе, чтобы разрешить объектам этого типа объявлять и разрешать изменение сведений о состоянии, таких как свойство 'TopSpeed'.
Методы могут быть предоставлены таким образом, что другие объекты могут запросить процесс, который будет выполняться объектом, например метод Steer (). Можно определить события, которые объект может вызвать в ответ на внутреннее действие. Другие объекты могут подписаться на них, чтобы они могли реагировать на происходящее событие. Примером для транспортных средств может быть событие "ImpactDetected", подписанное одним или несколькими объектами "подушки безопасности".
Абстракция
Класс транспортного средства, описанный выше, является примером абстракции. Абстракция - это процесс представления упрощенных версий объектов реального мира в ваших классах и объектах. Класс автомобиля не описывает все возможные детали автомобиля, только соответствующие части для разрабатываемой системы. Моделирование программного обеспечения вокруг объектов реального мира может значительно сократить время, необходимое для понимания решения и его разработки и обслуживания.
Композиция
Объекты могут работать вместе во многих отношениях в системе. В некоторых ситуациях классы и объекты могут быть тесно связаны друг с другом для обеспечения более сложных функциональных возможностей. Это называется композицией. В примере автомобилей, колеса, панели, двигатель, коробка передач и т. д. можно рассматривать как отдельные классы. Чтобы создать класс car, вы связываете все эти объекты вместе, возможно, добавляя дополнительную функциональность. Внутренняя работа каждого класса не важна из-за инкапсуляции, поскольку связь между объектами по-прежнему осуществляется через передачу сообщений на их открытые интерфейсы.
Наследование
Наследование - интересная концепция объектно-ориентированного программирования. Он позволяет одному классу (подклассу) основываться на другом (суперклассе) и автоматически наследовать все его функциональные возможности. Затем может быть добавлен дополнительный код для создания более специализированной версии класса. На примере транспортных средств можно было бы создать подклассы для автомобилей или мотоциклов. Каждый из них по-прежнему будет иметь все поведение транспортного средства, но может добавить специализированные методы и свойства, такие как "Lean()" и "LeanAngle" для мотоциклов.
Некоторые языки программирования допускают множественное наследование, когда подкласс является производным от двух или более суперклассов. C# не разрешает этого, но позволяет классу реализовать несколько интерфейсов. Интерфейс определяет контракт для методов и свойств классов, которые его реализуют. Однако он не включает в себя никакой фактической функциональности.
Полиморфизм
Полиморфизм - это способность объекта изменять свое поведение в соответствии с тем, как он используется. Если класс объекта наследуется от суперкласса или реализует один или несколько интерфейсов, на него можно ссылаться по именам этих классов или интерфейсов. Поэтому, если у нас есть метод, который ожидает, что объект типа "транспортное средство" будет передан в качестве параметра, мы можем передать любой объект транспортного средства, автомобиля или мотоцикла этому методу, даже если тип данных может быть технически другим.
Модульность
В дополнение к описанным выше концепциям объектно-ориентированное программирование также позволяет повысить модульность. Отдельные классы или группы связанных классов можно рассматривать как модуль кода, который может быть повторно использован во многих программных проектах. Это уменьшает потребность в повторной разработке подобной функциональности и, следовательно, может снизить время разработки и затраты.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.