Поиск по этому блогу

воскресенье, 5 февраля 2012 г.

Тезисы для лекции "Объекты и типы"


Привет, %username%.

Были времена, когда я преподавал курс ООП в вузе. На каждую лекцию старался писать план или конспект. В основном оно всё было достаточно кратко и не представляет какого-либо интереса. Наиболее подробно прорабатывал вводное занятие
"Лекция 1. Объекты и типы". Цель лекции объяснить студентам, знающим только функциональное программирование (да и то не все), что такое объекты, классы, абстракции.
Не стоит этот материал рассматривать как законченную лекцию, это просто тезисы, кое-где с примерами. Каждый пункт - это просто повод для разговора с аудиторией.

Итак, далее тезисы для лекции 1: "Объекты и типы"

Лекция 1. Объекты и их типы


Объекты реального мира

Объектно-ориентированное программирование (ООП) - это парадигма программирования, которая в настоящее время стала стандартом разработки программного обеспечения.
Что же это за объекты и почему мы должны на них ориентироваться?
Прежде всего стоит ответить себе на вопрос:
  • что мы понимаем под объектами реального мира?
  • То есть - что есть объект?

Рассмотрим на примерах:
Пример 1: Объект - это стул, стол, а так же любая другая вещь.
Пример 2: А философия является объектом? Вообще, да. Потому что о ней можно говорить, она имеет четкое определение и характеристики.
Пример 3: Цифра - это объект? ДА. 1 бит - это тоже объект!
Пример 4: Представим себе голодного студента. Студент - это объект? ДА!
А о чем он думает?
О том, чтобы поесть. Заметьте, он думает не об объекте еде, а об действии над этим объектом. О нем можно думать, говорить, оно может иметь конкретные характеристики. Можно сказать ел ложкой, или ел вилкой, или вообще пил чай.

Объект - это: предмет материального или не материального мира, а так же действие над другими объектами. Другими словами:
ВСЁ ЕСТЬ ОБЪЕКТ!


Модели в программах

Из математики или физики мы знаем о существовании математических или физических моделей. Их цель описать процессы реального мира, чтобы решить какую-нибудь задачу.
Любая модель обладает следующими свойствами:
  • она упрощенное представление реального мира
  • она направленна на решение конкретного круга задач
  • точность представления зависит от решаемой задачи

Так или иначе, каждая программа содержит внутри себя модель реального мира, которая сочетает в себе свойства математических и физических моделей.
Глобальная цель любой программы - упрощение жизни пользователя, автоматизация.
Задача языка программирования - предоставить средство для качественного описания модели программы.
Важный вывод: у каждой модели могут быть разные уровни детализации


Типы объектов

Например, необходимо описать  группу объектов. Пусть это будут геометрические фигуры. Описание может иметь следующий вид - фигура 1, фигура 2, фигура 3, … фигура 1000.
Получается достаточно трудоемкая задача. Объектов может быть много, некоторые однотипны, некоторые различны. Можно условно объединить однотипные объекты в группы, для их описания.
Например, 10 кругов различного радиуса, 5 квадратов, 985 многоугольников.
Такое описание гораздо компактней, сразу понятно что это и что с этим можно сделать.
Так рождается понятие типа объекта(класса).
Класс(тип объекта) - это описание характеристик группы объектов.

Далее мы будем о классе, но будем подразумевать, что можно есть и объект(объекты) этого класса, и наоборот, говорить об объекте(объектах), но описывая их, фактически описывать класс.
Красивое сравнение: класс - это чертеж, объект класса - это реальный объект, созданный по чертежам.


Состояние объекта

Вернемся к примеру с голодным студентом. После того как он поест, он перестает быть голодным, он уже сытый студент. Отметим, что объект студент - тот же. Но в разные моменты времени - у него было различное поведение.
  • Голодный студент - нервный и раздражительный
  • Сытый студент - добрый и сонный

Таким образом, в разных состояниях один и тот же объект может вести себя по разному.
Другой пример, объект ручка.
  • Состояние 1. Новая ручка со стержнем. Пишет хорошо и тонко
  • Состояние 2. Ручка исписанная на половину. Шарик разболтался и в результате ручка пишет, но “мажет” чернилами
  • Состояние 3. Стерженть ручки кончился. Ручка уже не пишет, но это всё таже ручка.

Из этого стоит сделать важный вывод:
каждый объект может иметь внутренне состояние и совершать действия, которые зависят от его состояния.


Абстракции в разработке ПО

Любая программа - это абстракция!
программа на ассемблере - абстракция на команды процессора
программа на Си - абстракция на циклы, условия, переменные
программа на ООП-языке - набор абстракций, описывающих реальную задачу.

Основные инструменты языка - классы и объекты.
Почему популярно? Вся красота в ЛЕГО!




Во многом, написание этих тезисов меня вдохновили первые главы книги Б Эккель Философия Java (Thinking in Java). Там понятию ООП уделяется несколько первых глав. Вместо того, чтобы читать мою писанину, советую почитать эту книжку.

Комментариев нет:

Отправить комментарий