КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Объектно-ориентированное программирование. Разработка алгоритмов и программ для вычислительных машин первых поколений выполнялась в соответствии с идеологией процедурного программированияРазработка алгоритмов и программ для вычислительных машин первых поколений выполнялась в соответствии с идеологией процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. В настоящее время идеология процедурного программирования по-прежнему широко используется. Структурное программирование также направлено на совершенствование этой идеологии. Принципиально другой идеологией алгоритмизации и программирования является ООП – объектно-ориентированное программирование. В настоящее время оно всё чаще используется для реализации очень больших и сложных проектов. Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. Она появилась в 1967 г., но тогда идеи ООП не были восприняты программистами: создававшиеся в те годы пакеты прикладных программ ещё не были столь масштабными, и их проще было разрабатывать средствами процедурного программирования. Затем концепции ООП были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Он стал первым распространённым объектно-ориентированным языком программирования. В современных средах визуального программирования (глава 6) идеи ООП являются доминирующими, но вместе с тем широко применяются идеи процедурного программирования. Концепция объектно-ориентированного программирования подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями (или с событиями), на которые они должны реагировать при выполнении программы. В этом состоит главное отличие ООП от процедурного программирования, где отдельно определённые структуры данных передаются в процедуры (функции) в качестве параметров. Таким образом, объектно-ориентированная программа состоит из объектов. Каждый объект имеет определённые свойства. Состояние объекта задаётся значениями его признаков. Объект «знает», как решать определённые задачи, т. е. располагает методами решения. Например, объект Счётчик (см. п. 2.2) реагирует на щелчок мышью по одной из его кнопок: если это событие происходит, Счётчик увеличивает или уменьшает значение своего свойства Value. В основе ООП – три принципа: инкапсуляция, наследование и полиморфизм. Инкапсуляция – это объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями или свойствами объекта, а алгоритмы – объектными методами. Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения и повышает надежность разрабатываемых программ. Замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом. Следствием инкапсуляции является легкость обмена объектами, переноса их из одной программы в другую. Наследование – свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их. Принцип наследования решает проблему модификации свойств объекта и придает ООП гибкость. При работе с объектами программист обычно подбирает объект, наиболее близкий по своим свойствам для решения конкретной задачи, и создает одного или нескольких потомков от него, которые «умеют» делать то, что не реализовано в родителе. Полиморфизм – это свойство родственных объектов (т. е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. В рамках ООП поведенческие свойства объекта определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках объекта, программист может придавать этим потомкам отсутствующие у родителя свойства. Для изменения метода необходимо перекрыть его в потомке, т. е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов. Для пояснения перечисленных принципов приведём пример. Допустим, требуется разработать объект Окружность, основываясь на уже имеющемся объекте Точка, который заключает в себе (инкапсулирует) свойства X, Y (координаты точки) и метод Draw (Рисовать). В этом случае объект Окружность можно создать, объявив его потомком объекта Точка. Только придётся добавить ещё свойство R (радиус окружности), а метод Draw перекрыть, так как окружность рисуется не так, как точка.
|