|
Лекции |
Введение в теорию программирования. Объектно-ориентированный подход
|
|
|
0. |
|
Вступительная лекция
|
|
1. |
|
Объектно-ориентированный подход ...
|
|
2. |
|
Платформа.NET и ее применение д...
|
|
3. |
|
Основные понятия языка программ...
|
|
4. |
|
Разработка элементарных программ...
|
|
5. |
|
Семантика основных конструкций я...
|
|
6. |
|
Основные понятия объектно-ориентированного подхода: объекты, классы и методы
|
|
7. |
|
Объекты и классы
|
|
8. |
|
Теория типов и типизация в .NET
|
|
9. |
|
Концепция наследования и ее реал...
|
|
10. |
|
Концепция инкапсуляции и ее реа...
|
|
11. |
|
Концепция полиморфизма и ее реа...
|
|
12. |
|
Полиморфные методы
|
|
13. |
|
Расширенные возможности полимор...
|
|
14. |
|
Расширенные возможности языка пр...
|
|
15. |
|
Событийно управляемое программи...
|
|
16. |
|
Событийно-ориентированное програ...
|
|
17. |
|
Компонентное программирование в ...
|
|
18. |
|
Проектирование и реализация гете...
|
|
|
|
|
Экзамен |
|
|
Сдать экзамен экстерном |
|
|
|
Литература |
|
|
Предметный указатель |
|
|
|
| |
|
|
Введение в теорию программирования. Объектно-ориентированный подход |
версия для локальной работы
|
|
|
|
|
6. Лекция: Основные понятия объектно-ориентированного подхода: объекты, классы и методы |
|
|
|
Страницы:
1
|
2
|
3
|
вопросы | »
|
| |
учебники
|
для печати и PDA
|
|
|
Если Вы заметили ошибку - сообщите нам. |
|
В данной лекции будут рассмотрены вопросы, относящиеся к идеологии, методологии и практике моделирования основных элементов объектно-ориентированного подхода к программированию посредством двухуровневой концептуализации. Особенности практической реализации основных аспектов концепции ООП описаны на примере языка программирования C#. |
|
|
|
|
Включить комментарии
|| Настройки
|| Модерация
|| Помощь
| |
|
|
|
|
|
Как и поля, методы описываются в блоке описания класса.
Рассмотрим особенности использования методов на примере следующей программы на языке C#, представляющей описание класса C с полями sum и n и методами Add и Mean:
class C { int sum = 0, n = 0; public void Add (int x){ sum = sum + x; n++; //процедура } public float Mean(){ return(float)sum/n; //функция(должна возвратить //значение) } }
Прежде всего, отметим, что методы в языке программирования C# делятся на функции (которые обязаны возвращать значение) и процедуры (которые могут и не возвращать значения, на что указывает тип void). В данном примере Add - процедура, а Mean - функция, в которой возврат значения явно указывается оператором return. Доступ к методу, как и к полю, можно получить изнутри класса:
this.Add(3); float x = Mean();
а также из других классов, с явным указанием полного имени:
C c = new C(); c.Add(3); float x = c.Mean();
Заметим, что оператор this представляет собой указатель на текущий объект.
Продолжая аналогию между полями и методами как элементами классов, мы приходим к понятию статического метода. Рассмотрим особенности реализации статических методов в языке программирования C# на следующем примере:
class Rectangle { static Color defaultColor; public static void ResetColor() { defaultColor = Color.white; } }
Как явствует из приведенного примера, под статическим методом понимается операция, определенная над статическими элементами классов (т.е. над статическими полями).
В данном примере описания класса Rectangle статическим является метод ResetColor (заметим, что он не возвращает значения, т.е. ResetColor - это статическая процедура).
По аналогии с предыдущими случаями, для доступа к статическому методу изнутри класса достаточно указать только краткое имя данного метода:
ResetColor();
В случае доступа из сторонних классов необходимо указать полное имя статического метода:
Rectangle.ResetColor();
Исследовав особенности описания и управления поведением основных элементов классов, объектов и методов для динамического и статического случаев, кратко остановимся на особенностях наследования свойств (полей и методов) классов объектов языка программирования C#.
Для иллюстрации приведем следующий пример фрагмента программы на языке C#:
class Stack { int[] values; int top = 0; public Stack(int size){ ... } public void Push(int x){ ... } public int Pop(){ ... } }
В данной программе приведено (с сокращениями) описание класса, моделирующего стек (аналогичный стеку КАМ) посредством массива элементов values с вершиной top, функциями создания стека Stack размером size и "выталкивания" Push элемента x из стека, а также "вталкивания" Pop элемента в стек.
Аналогично объектам ссылочных типов, объекты классов (как принципиально динамические) хранятся в динамической области памяти (или так называемой "куче"). В силу ограничений безопасности программного кода любой объект языка программирования C# до использования необходимо инициализировать оператором new, например:
Stack s = new Stack(100);
Заметим, что наследование классами свойств других классов может быть как единичным, так и множественным. Последнее реализуется посредством множественных интерфейсов (что приводит к множественному наследованию типов).
Подводя итоги обсуждения основных понятий объектно-ориентированного подхода к программированию (классов, объектов и методов) применительно к языку программирования C#, кратко отметим достоинства и недостатки подхода.
К преимуществам объектно-ориентированного подхода следует отнести:
- интуитивную близость произвольной предметной области;
- возможность моделирования сколь угодно сложной предметной области, высокий уровень абстракции (рассмотренные примеры дают представление о "масштабируемости" моделирования сложных объектов);
- событийно-ориентированный подход (динамика объектов и возможность манипулирования ими посредством методов приводят к управлению объектами посредством событий);
- возможность повторного использования описаний (основана на обращении к полям и методам извне описания классов, а также на использовании механизма наследования);
- параметризация методов обработки объектов (основана на использовании механизма интерфейсов, которые будут подробно рассмотрены в ходе дальнейших лекций).
К недостаткам объектно-ориентированного подхода к программированию можно отнести сложность тестирования и верификации программ. Заметим, однако, что выбор ламбда-исчисления и комбинаторной логики в качестве средства формализации объектов, классов и методов позволяет построить адекватную, полную и непротиворечивую объектную модель, учитывающую как статический, так и динамический случаи.
Для более подробного самостоятельного ознакомления с тематикой лекции рекомендуется следующий список источников: [ 24, 28, 36, 66-69, 79-81].
Содержание раздела
| |