Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Три принципа объектного программирования
Наследование Чтобы наиболее эффективно повторно использовать ранее созданные классы, одного сочетания данных и методов в единой структуре недостаточно. Например, автомо- биль может быть легковым и грузовым, и соответствующие классы будут иметь как общие поля и методы, так и отличия (например, дополнительное свойство ≪гру- зовой кузов* и связанный с ним метод ≪разгрузить≫). Однако полностью заново определять новый тип данных, если требуется изменить или добавить несколько новых свойств к старому типу, нерационально. Это плохо еще и потому, что если в Клоссы и обьекты 85 метод, имеющийся в обоих классах, потребуется внести исправления, то их при- дется делать дважды, в двух одинаковых копиях подпрограмм. Чтобы избежать ненужной работы, в объектном программировании был введен принцип наследования свойств и методов. Программисту достаточно описать один базовый класс (например, ≪автомобиль*), а классы ≪легковой автомобиль≫ и ≪гру- зовой автомобиль* основывать на этом базовом классе. При этом будут наследо- ваться все поля, свойства и методы базового (или родительского) класса, а допол- нительно описывать их не требуется. Цепочки наследования могут быть неограниченной длины. Так, у класса ≪грузовой автомобиль≫ могут быть классы-наследники (или дочерние классы) ≪МАЗ* и ≪КА- МАЗ≫, обладающие дополнительными специфическими свойствами и методами (это классы, а не объекты; объектом будет конкретный грузовик МАЗ, а не марка этого автомобиля), у класса ≪кнопка* наследники — ≪графическая кнопка*, ≪круглая кнопка≫ и так далее. При этом различные методы для каждого из наслед- ников разрешается переопределять. Например, метод ≪двигаться≫ для классов ≪МАЗ≫ и ≪КАМАЗ≫ будет, хоть и немного, но отличаться: по-разному расходуется горючее (снижается значение соответствующего свойства), по-разному набирается скорость и так далее. Полиморфизм(у класса по сути полиморфным явл именно указатель.сама переменная типа Тобджект не явл полиморфной,поскольку она имеет фиксированный размер) Когда будет происходить обращение к переменной, относящейся к классу ≪КАМАЗ≫, и вызов унаследованного метода ≪двигаться≫, программе придется решить, какой
конкретно метод надо вызвать: метод класса ≪автомобиль*, ≪грузовой автомобиль* или ≪КАМАЗ≫. В соответствии с принципом полиморфизма решение принимается в зависимости от типа переменной, вызывающей этот метод. То есть, если перемен- ная описана как относящаяся к типу ≪КАМАЗ*, будет вызван метод ≪двигаться≫, определенный именно для КАМАЗа. Инкапсуляция(инкапсуляция поддерживается как раз таки за счет того,что у нас есть области видимости членов классов,можно какие-то фрагменты кода скрыть от внешней программы и позволять работать только через методы.За счет того,что модули не дают доступа к implementation) Инкапсуляция позволяет разграничить доступ разработчиков к различным полям и свойствам класса, примерно так, как это сделано в модулях Delphi, когда из других модулей видима только интерфейсная часть. Точно так же и внутри классов неко- торые поля и методы можно сделать свободно доступными для использования {види- мыми) в любом месте программы, а другие поля и методы сделать доступными только внутри текущего модуля и собственных методов класса. Это позволяет скрыть внутри описания различные характеристики и возможности класса, чтобы сосредоточить внимание разработчиков, повторно использующих этот класс, на его важнейших свойствах. Кроме того, желательно не допускать бесконтрольного изменения значений свойств, так как это может привести к нарушению запланированной и сбалансиро- ванной взаимосвязи между этими свойствами. Например, нельзя бездумно изме- нить значение свойства ≪текущая скорость≫, просто записав в него новое число. Надо вызвать соответствующий метод, который учтет изменение потребления бен- зина и выполнит ряд дополнительных действий. Хорошим стилем программирова- 86 Урок 1. Язык Delphi (Object Pascal) и его использование ния считается недоступность всех полей и свойств объекта для прямого изменения. Вместо этого создаются методы, позволяющие получить значение поля и занести в него новое значение. Сами поля помещаются в скрытую часть класса.
События Помимо этих трех фундаментальных возможностей объектно-ориентированного программирования, в среде Delphi реализована новая характеристика объекта — возможность обработки так называемых сообщений (или событий), получаемых от системы Windows или самой программы. Этот принцип лежит в основе работы всех визуальных компонентов Delphi, которые обрабатывают различные события, возникающие в процессе выполнения программы.
|
||||||
Последнее изменение этой страницы: 2017-02-21; просмотров: 178; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.12.240 (0.007 с.) |