Что такое поведение объекта в информатике
Урок 13
Информационное моделирование на компьютере
Содержание урока
Объектно-информационные модели. Что такое объект
Объектно-информационные модели
Что такое объект
Основные темы:
— что такое объект;
— свойства объекта;
— состояние объекта;
— поведение объекта;
— классы объектов;
— наследование;
— иерархические системы классов.
Что такое объект
А сейчас рассмотрим еще один подход к информационному моделированию, который называется объектно-ориентированным подходом. Главным понятием здесь является понятие «объект».
Объект — это некоторая часть окружающей нас действительности, воспринимаемая как единое целое.
С точки зрения восприятия человеком объекты можно разделить на следующие группы:
• осязаемые или видимые объекты (например: кресло, автомобиль, мост);
• образы, созданные мышлением (например: стихотворение, музыкальное произведение, математическая теорема).
Свойства объекта
Объектно-информационная модель должна отражать некоторый набор свойств, присущих объекту моделирования.
Свойства объекта отличают его от других объектов.
Рассмотрим примеры объектов и их свойств (табл. 2.6).
У каждого конкретного объекта свойства имеют определенные значения. В нашем примере добавим значения свойств объектов (табл. 2.7).
Состояние объекта
Состояние объекта характеризуется перечнем всех возможных его свойств и текущими значениями каждого из этих свойств.
Изменение состояния объекта отражается в объектно-информационной модели изменением значений его свойств. Как правило, объекты не остаются неизменными. Например, растет стаж работы учителя И. И. Иванова; на жестком диске изменяется объем занятой памяти; документ может быть перенесен на другой диск, в другую папку и пр. Все эти процессы в объектно-информационной модели отражаются изменениями значений свойств.
Поведение объекта
В объектно-информационной модели отражаются не только свойства, но и поведение объекта.
Поведение объекта — действия, которые могут выполняться над объектом или которые может выполнять сам объект.
Опишем поведение объектов из нашего примера (табл. 2.8).
Классы объектов
А сейчас введем еще одно очень важное понятие для объектно-информационного моделирования — понятие класса.
Класс объектов определяет множество объектов, обладающих одинаковыми свойствами и поведением.
Говорят, что объект является экземпляром какого-либо класса. Все преподаватели обладают одним и тем же набором свойств (имя, стаж работы, читаемый курс) и поэтому образуют класс. Присвоим этому классу имя «Преподаватель». Каждый конкретный преподаватель — экземпляр этого класса (или объект). Следовательно, «Мой преподаватель» — экземпляр класса «Преподаватель». Аналогично можно ввести класс «Жесткий диск», объединив в нем все жесткие диски. Тогда «Мой жесткий диск» — экземпляр класса «Жесткий диск». Если принять во внимание, что класс «Документ» описывает свойства и поведение всех документов, то «Важный документ» — экземпляр класса «Документ».
Таким образом, экземпляр класса (объект) — это конкретный предмет или образ, а класс определяет множество объектов с одинаковыми свойствами и поведением. Класс может порождать произвольное число объектов, однако любой объект относится к строго фиксированному классу.
Объектно-информационные модели имеют иерархическую структуру (дерево). Иерархичность проявляется в том, что некоторый класс сам может быть подмножеством другого, более широкого класса. Вот пример иерархической классификации из биологии: вид «Насекомые» включает в себя два отряда: «Крылатые» и «Бескрылые»; в свою очередь «Крылатые» насекомые делятся на следующие подотряды: «Мотыльки», «Бабочки», «Мухи» и т. д. (рис. 2.14).
Следующая страница Объектно-информационные модели. Наследование
NEWOBJ.ru → Введение в ООП с примерами на C# →
2.3. Поля и методы: состояние и поведение
2.3. Поля и методы: состояние и поведение
§ 15. Состояние и поведение. В настоящем разделе мы подробнее разберем особенности использования методов и полей классов. Начнем с определения [Буч 3]:
Состояние объекта (state) – перечень полей объекта (обычно статический) и текущих значений каждого из этих полей (обычно динамический).
Мы оговариваем, что перечень полей обычно статический, то есть зафиксированный в определении класса, так как в некоторых языках перечень полей может быть изменен после создания объекта.
Мы оговариваем, что перечень текущих значений полей обычно динамический, то есть может меняться после создания объекта, так как во всех языках есть механизмы, позволяющие ограничить изменение полей после создания объекта. Мы обсудим некоторые из таких возможностей в следующем параграфе.
В настоящей книге мы используем термин поле ( field ), так как оно используется в C#. При этом в других языках программирования для обозначения полей класса могут применяться и другие термины: переменная-член ( member variable, member ), свойство ( property ). Отметим, что термин свойство, в свою очередь, имеет в C# специфическое значение и будет рассмотрен ниже в настоящей главе.
Приведем определение поведения объекта аналогичное определению состояния объекта [3].
Мы оговариваем, что перечень методов, обычно статический, так как в некоторых языках программирования существуют механизмы, позволяющие изменять перечень методов класса или отдельного объекта при выполнении программы.
Мы оговариваем, что результаты вызова методов зависят от текущего состояния или, по-другому, определяются историей объекта (то есть историей изменения его состояния), так как один и тот же метод в общем случае может возвращать разные результаты в зависимости от состояния.
Сокрытие переменных можно назвать разновидностью более общего понятия – перегрузки – использования в одной и той же области видимости одного и того же имени для обозначения разных элементов языка. Если «элемент языка» – метод, то мы имеем дело с перегрузкой методов.
Перегрузка метода (overloading) – определение в одной и той же области видимости нескольких методов с одинаковым именем, но различающихся количеством или типами параметров.
Компилятор, используя различие в параметрах, определяет на этапе компиляции, какой именно метод необходимо вызывать.
Мы используем термин метод, так как он используется в C#, но в других языках и, в целом, в объектно-ориентированном программировании как синонимы также используются термины функция (function) и функция-член (member function). Исторически термин функция возник в процедурном программировании и обозначал функцию, не связанную ни с каким классом. В объектно-ориентированных языках чтобы различать функции, не связанные ни с каким классом, и функции класса, последние стали называть другими терминами, например, функциями-членами в C++ и методами в C# и Java, оставив термин функция для функций, объявленных вне классов. При этом во многих объектно-ориентированных языках вовсе нет возможности объявить функцию вне какого-либо класса.
§ 16. Неизменяемость. Изменение программистом значений переменных (состояния объектов) в ходе выполнения программы выглядит вполне естественной практикой. Однако существует множество ситуаций, когда желательно так или иначе ограничивать эту возможность.
Приведем еще пример:
Дополнительным аргументов в пользу неизменяемости состояния объектов является потенциальное повышение производительности. Компилятор, зная, что значение тех или иных переменных не будет никогда меняться, может сгенерировать более оптимальный код.
Значения констант должны быть определены на момент компиляции приложения, поэтому мы не можем их использовать со ссылочными переменными – экземплярами классов 26 :
Этот пример демонстрирует несколько важных особенностей.
Во-первых, в C# неизменяемость ( immutability ) – это свойство класса, а не объекта: или мы объявляем класс как неизменяемый и все его экземпляры будут неизменяемыми. Или мы объявляем класс как изменяемый и все его экземпляры будут также изменяемыми. У нас нет возможности сделать неизменяемым только некоторые экземпляры этого класса. Для сравнения, отметим, что в C++ такая возможность есть: мы можем отметить ключевым слово const переменную или даже параметр метода и это будет значить, что указанную переменная или параметр метода невозможно изменить, но другие, не отмеченные этим словом экземпляры будут изменяемыми, а объект-параметр будет изменяемым вне соответствующего метода.
И последний момент, который мы разберем – особенность копирования неизменяемых объектов. В конструкторе для копирования объекта-центра мы используем копирование ссылки, так как уверены, что переданный объект уже не будет никогда изменен и вполне достаточно иметь всего один экземпляр объекта, на который будут ссылаться множество логически не связанных между собой переменных.
В заключение отметим, что, применяя имеющиеся возможности языка, как правило, лучше избыточно ограничить изменение переменных и позже снять это ограничение, чем случайно изменить переменную, которая с точки зрения других фрагментов кода, должна быть неизменяемой.
Несмотря на широкое использование в ежедневной практике, для объектно-ориентированного программирования неизменяемость – это всегда ограничение, так как исходно переменные в ООП изменяемые ( mutable ). Более того, в теории языков программирования введение неизменяемости для всех объектов – это определение функциональной парадигмы программирования [Мартин 11].
§ 17. Сохраняемость. Иногда требуется сохранить состояние объекта между запусками программы или при перемещении объекта между приложениями. Конечно, строго говоря, при восстановлении сохраненного состояния, мы в действительности создаем новый объект в памяти и присваиваем его полям значения, соответствующе тем, которые были у другого объекта. Однако удобно представлять этот процесс на более высоком уровне абстракции, как сохранение и восстановление.
Сохраняемость – способность объекта существовать во времени, переживая породивший его процесс, и (или) в пространстве, перемещаясь из своего первоначального адресного пространства. [Буч 3]
Для сохранения объекта в файл, передачи по сети или другому процессу, как правило, требуется привести значения полей объекта в формат, который будет понятен получателю и преобразовать их в непрерывную последовательность байт. Этот процесс называется сериализацией (от англ. serial – последовательный).
Сериализация (serialization) – преобразование состояния объекта в последовательность байт. Сериализация может быть двоичная, текстовая (JSON, XML) или какая-либо другая. Обратный процесс называется десериализацией.
На следующем рисунке предоставлен пример сериализации объекта в формат JSON.
ORM (object-relational mapping) – «объектно-реляционное сопоставление» – механизм (реализуемый не языком программирования, а сторонними библиотеками), позволяющий сохранять или восстанавливать состояние объекта в приложении в реляционную базу данных.
Следует отметить, что полноценное «зеркалирование» базы данных в объекты памяти помимо трудоемкости, а точнее рутинности этого процесса, сопряжено с множеством концептуальных проблем, прежде всего, связанных с транзакциями. Чтобы преодолеть эти ограничения некоторые базы данных заявляются как объектные, а не реляционные, в том смысле, что при работе с ними мы не транслируем объектную модель программы в реляционную модель БД с помощью ORM, а напрямую сохраняем в БД в объектной модели. Хотя эти направления динамично развиваются, однако пока остаются нишевыми.
§ 18. Свойства в C#. В заключение главы, коротко рассмотрим специальную синтаксическую разновидность методов в C# – свойства. В C# мы можем объявить метод, возвращающий значение заданного типа или принимающий один параметр заданного типа, используя следующий специальный синтаксис, позволяющий пользователям класса обращаться к этим методам, как к полям:
Отметим еще раз, что свойства – специфическая возможность C# и представляет лишь синтаксическое упрощение для объявления и вызова определенных методов, а термин «свойство» вне языка C# часто используется для обозначения обычных полей класса.
Вопросы и задания
1. Дайте определение следующим терминам и сопоставьте русские термины с английскими: состояние объекта, поле, переменная-член, свойство, поведение объекта, метод, перегрузка метода, функция, функция-член, сокрытие локальных переменных неизменяемость, константа; state, field, member variable, property, behavior, method, overloading, member function, immutability.
2. Имеет ли открытый ( public ) метод класса доступ к закрытым ( private ) полям того же класса (1) того же объекта, для которого этот метод был вызван; (2) для другого объекта того же класса, который был передан как параметр этого метода?
3. В чем отличие между классом без состояния ( stateless ) и неизменяемым классом ( immutable )?
4. Почему нельзя перегрузить методы с одинаковыми параметрами, но отличающимися типами возвращаемых значений?
6. Назовите преимущества и недостатки использования неизменяемых типов данных.
9. Является ли массив неизменяемым типом данных в C#?
10. Повышают ли производительность приложений использование const и readonly в C#? Является ли производительность фактором, который необходимо учитывать, применяя механизмы языка программирования по ограничению изменения состояния объектов?
11. Объясните утверждение, что в C# неизменяемость – свойство классов, а не объектов.
12.* Познакомьтесь с подходом «event sourcing» (к сожалению, устоявшегося перевода этого термина нет), в рамках которого мы храним список транзакций, то есть событий об изменении состояния, но не храним само состояние.
13.* Приведите аргументы в пользу следующего тезиса: «Чем большей памятью мы располагаем и чем быстрее становятся наши компьютеры, тем меньше мы нуждаемся в изменяемых состояниях.» [11]
24. Или – в C# – свойства, см. § 18.
25. Системы статического анализа кода не в счет, так как это внешние по отношению к языку программирования инструменты.
26. Строго говоря, структуры C# (struct) также не могут быть константами, хотя и являются значимыми типами.
27. Нередко этот способ сохранения объектов в реляционную БД подвергают критике. Подробный анализ этого вопроса приведен, например, в [Дейт 4]. Однако по факту, именно описанная модель сегодня является самой распространенной.
Конспект по дисциплине Программирование на тему «Поведение объекта»
П о вед е н и е ( д е й ст в и я)
П о сещ е н и е з а н я т и й
О т в ет на сем и н а р а х
С д а ч а з аче т о в
С д а ч а э кзам е но в
П е р ев о д н а с л е д у ю щий к у рс
Жест к и й д и ск № 1 2 3 4 5
Ф ор м ат и ро в а н и е
К о пи ро в а н и е
Т р а н с п о н и р о в а н и е
О пр е д ел е ни е, яв л яе тся л и ма т р и ц а
Вы ч и сле н и е о б р а т н о й ма т р и ц ы
С л о ж е н и е мат р и ц
Курс повышения квалификации
Дистанционное обучение как современный формат преподавания
Курс повышения квалификации
Педагогическая деятельность в контексте профессионального стандарта педагога и ФГОС
Курс повышения квалификации
Современные педтехнологии в деятельности учителя
Ищем педагогов в команду «Инфоурок»
Программи́рование — процесс создания компьютерных программ.
В узком смысле (так называемое кодирование) под программированием понимается написание инструкций (программ) на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывают алгоритмы — алгоритмистами, специалистами предметной области, математиками.
В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Иначе это называется «программная инженерия» («инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.
Программирование для ЭВМ основывается на использовании языков программирования, на которых записывается программа. Чтобы программа могла быть понята и исполнена ЭВМ, требуется специальный инструмент — транслятор.
В настоящее время активно используются интегрированные среды разработки, включающие в свой состав также редактор для ввода и редактирования текстов программ, отладчики для поиска и устранения ошибок, трансляторы с различных языков программирования, компоновщики для сборки программы из нескольких модулей и другие служебные модули.
Текстовый редактор среды программирования может иметь специфичную функциональность, такую как индексация имен, отображение документации, средства визуального создания пользовательского интерфейса. С помощью текстового редактора программист производит набор и редактирования текста создаваемой программы, который называют исходным кодом. Язык программирования определяет синтаксис и изначальную семантику исходного кода. Компиляторпреобразует текст программы в машинный код, непосредственно исполняемый электронными компонентами компьютера. Интерпретатор создаёт виртуальную машину для выполнения программы, которая полностью или частично берёт на себя функции исполнения программ.
Учитель информатики
Сайт учителя информатики. Технологические карты уроков, Подготовка к ОГЭ и ЕГЭ, полезный материал и многое другое.
§ 1. Объекты окружающего мира
Информатика. 6 класса. Босова Л.Л. Оглавление
Объекты и множества
Объект — это любая часть окружающей действительности (предмет, процесс, явление), воспринимаемая человеком как единое целое. Объектами принято называть всё то, на что обращено внимание человека.
Так, телефон, стол, книга, кошка — примеры объектов-предметов. Каникулы, учёба, чтение, поездка — примеры объектов-процессов. Гроза, солнечное затмение, снегопад — примеры объектов-явлений.
Множество — это совокупность, набор, коллекция объектов. Объекты, составляющие некоторое множество, называются его элементами.
Множество может, в частности, состоять из трёх, двух, одного элемента или быть пустым (например, множество отличников в классе). Множество может быть конечным (например, множество цифр или множество букв русского алфавита). Множество может быть бесконечным (например, множество натуральных чисел).
Каждый объект имеет имя, которое позволяет отличать его от других объектов. Имя объекта человек называет, отвечая на вопрос «Что это такое?» или «Кто это такой?».
Общаясь, люди передают друг другу самые разнообразные сведения о реальных и воображаемых объектах, обозначая объекты именами — словами языка. Но в различных ситуациях один и тот же объект может получать разные имена.
Например, собака — это объект реального мира. Собаку можно назвать Каштанкой, пёсиком, домашним животным или просто животным. Чем отличаются эти имена и от чего зависит выбор того или иного имени?
Имена бывают общими, обозначающими множество объектов, и единичными, обозначающими конкретный объект в некотором множестве.
Например, городам Лондон, Манчестер и Ливерпуль можно дать такие общие имена: «город», «европейский город», «город в Англии». Наиболее точным в данном случае будет общее имя «город в Англии». А для городов Москва, Париж, Лондон и Мадрид наиболее точным будет общее имя «столичный европейский город». Все упоминавшиеся здесь города образуют множество с общим именем «европейский город».
При выборе имени для конкретного объекта некоторого множества — единичного имени объекта — нужно придерживаться следующего правила: у всех объектов множества имена должны быть разными.
Например, если во дворе растет одна берёза, то жильцы дома могут использовать единичное имя «берёза», потому что они рассматривают не множество всех растений в мире, а множество деревьев в своём дворе. Если во дворе две берёзы, на столе пять чашек, в книжном шкафу много книг, то будут использоваться более длинные единичные имена, например: «берёза у окна», «голубая чашка», «книга по истории, которая лежит на нижней полке шкафа» (рис. 1).
Чтобы обойтись без таких длинных обозначений, для некоторых видов объектов (людей, домашних животных, книг, журналов, кинофильмов, географических объектов, планет и т. д.) используются собственные имена. Например: Александр Сергеевич Пушкин, роман «Война и мир», Мухтар, Москва, Ангара, кинофильм «Ночной дозор», Луна.
Объекты изучения в информатике
Разные науки изучают и исследуют разные объекты или одни и те же объекты, но с разных сторон. Например, космические тела изучаются на уроках астрономии, земная поверхность — на уроках физической географии, растительный и животный мир — на уроках биологии, прошлое человечества — на уроках истории, принципы работы некоторых технических устройств — на уроках физики и технологии, пространственные формы и количественные отношения — на уроках математики.
Информатика — наука, изучающая закономерности протекания процессов передачи, хранения и обработки информации в природе, обществе, технике, а также способы автоматизации этих процессов с помощью компьютера.
Объектами изучения в информатике являются информация, информационный процесс, алгоритм, исполнитель, компьютер, включая его аппаратное и программное обеспечение, и т. д.
Признаки объектов
Кроме имени в сообщении об объекте человек может подробно перечислить его признаки: свойства, действия, поведение, состояния.
Свойства объектов отвечают на вопросы: «Чем может отличаться один объект от другого?», «Что может измениться у объекта при выполнении действия? ».
Например, собаки могут отличаться друг от друга окрасом, города — численностью населения, реки — длиной; при редактировании документа его размер может уменьшиться, при нагревании воды увеличивается её температура.
Каждое свойство определяется некоторой величиной и тем значением, которое она принимает. Примеры величин: цвет, материал, форма, длина. Примеры значений: красный, железный, прямоугольный, 2 м.
В таблице 1 приведены объекты, их свойства, а также величины и значения величин, соответствующие этим свойствам.
Таблица 1
Возможности объекта обозначаются именами действий, отвечающими на вопросы: «Что он может делать?» (активное действие) или «Что с ним можно делать?» (пассивное действие).
Например, далматин бегает, операционная система управляет работой компьютера, воздушный шар можно надуть, файл — переименовать, модифицировать, удалить и т. д.
Чтобы описать поведение объекта, нужно не просто назвать имена действий, а составить пошаговое описание каждого действия, свойственного этому объекту.
Без этого информация об объекте будет неполной. Ведь действие с одним и тем же именем различные объекты могут совершать по-разному.
Например, птицы, воздушные шары и вертолёты неодинаково летают, а действие «строить» человек по-разному выполняет с домами, мостами и тоннелями.
Говоря о состоянии объекта, человек называет или подразумевает определённое сочетание всех или некоторых свойств этого объекта.
Например, под хорошей погодой человек может понимать определённую температуру воздуха (тепло), отсутствие сильного ветра (тихо) и осадков (солнечно). Когда с объектом выполняется действие, его состояние изменяется. Например, с воздушным шариком можно связать величины «объём» (в литрах), «высота» (в метрах над Землёй) и «поврежденность» (наличие дырок). Когда воздушный шар надувают, изменяется его объём. Во время полёта шара будет увеличиваться высота, на которой он находится. А когда шарик лопнет и упадёт, изменятся значения сразу всех трёх величин.
Самое главное
Объект — это любая часть окружающей действительности (предмет, процесс, явление), воспринимаемая человеком как единое целое.
Множество — это совокупность, набор, коллекция объектов.
Каждый объект имеет имя, которое позволяет отличать его от других объектов. Имена бывают общими, обозначающими множество объектов, и единичными, обозначающими конкретный объект в некотором множестве.
В сообщении об объекте человек может описать его признаки — свойства, действия, поведение, состояние.