На Горох
Информатика, 11 класс

§ 46. Что такое ООП?

"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.

Объяснение темы В оглавлении: § 46. Что такое ООП?

Кратко о теме

Объектно-ориентированное программирование (ООП) — способ строить программу как набор взаимодействующих объектов. Каждый объект объединяет данные о конкретной сущности и действия, которые с ней можно выполнять. Общий шаблон таких объектов задаёт класс: он определяет свойства и методы, но не задаёт одинаковые значения для всех экземпляров. ООП помогает представить предметную область в коде и распределить задачи между частями программы.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Объект — сущность программы, объединяющая данные о конкретном экземпляре и действия, которые с ним можно выполнять. Например, объектом может быть отдельная книга с собственным названием. Такое представление позволяет программе работать не с разрозненными значениями, а с цельной сущностью.

Класс — описание общего устройства объектов: их свойств и методов; по классу создают объекты. Класс можно сравнить с проектом, в котором указано, что должно быть у каждого экземпляра. Это нужно, чтобы создавать однотипные объекты по единым правилам, не описывая их устройство заново.

Свойство — характеристика объекта, значение которой хранится в его данных. У книги это могут быть название, автор и год издания. Свойства помогают программе хранить сведения о конкретном объекте и различать экземпляры одного класса.

Метод — действие, заданное в классе и выполняемое объектом. Например, объект банковского счёта может выполнять метод пополнения. Методы нужны, чтобы задавать поведение объекта и связывать операции с данными, к которым они относятся.

Как это устроено

При решении небольшой задачи бывает удобно записать команды по порядку: получить данные, выполнить вычисление, вывести результат. Но в сложной программе одновременно появляются разные сущности, у каждой — свои данные и возможные действия. Если хранить всё отдельно, становится трудно понять, к какой сущности относится переменная и какая часть кода должна её менять. Поэтому программу можно организовать как набор объектов, каждый из которых отвечает за свою часть задачи.

Чтобы выделить объекты, сначала рассматривают предметную область — то, о чём должна быть программа, — и находят важные сущности. Например, в системе библиотеки это книги и читатели. Затем для каждой сущности определяют, какие сведения программе нужно хранить и какие действия с ней выполнять. У книги можно хранить название и автора, а действиями сделать получение сведений или отметку о выдаче; так данные и поведение связываются с подходящим объектом.

Для объектов одного типа описывают класс. Например, класс «Книга» задаёт свойства «название», «автор» и метод «получить описание», но сам по себе не является конкретной книгой. Созданные по классу объекты — экземпляры — получают собственные значения свойств: один может называться «Дубровский», другой — «Капитанская дочка». Общий шаблон избавляет от необходимости отдельно придумывать структуру для каждой книги.

Метод выполняет действие, используя данные объекта. Так, метод пополнения счёта должен изменить хранящуюся в объекте сумму, а метод получения баланса — сообщить её значение. Если данные и связанные с ними операции находятся в одном месте, меньше риск случайно изменить состояние объекта несогласованным способом. Такое объединение упрощает чтение программы и помогает менять устройство одной части, не переписывая всё остальное.

Объекты могут решать общую задачу, обращаясь друг к другу через предусмотренные методы. Например, клиент системы проката может запросить велосипед, а объект велосипеда — сообщить, доступен ли он. Внешней части программы не обязательно знать, как именно внутри хранится состояние велосипеда: достаточно вызвать разрешённый метод и получить результат. Сокрытие деталей уменьшает зависимость между частями кода и позволяет менять внутреннюю реализацию, сохраняя способы взаимодействия.

Класс и объект в объектно-ориентированной программе

ПризнакКлассОбъект
Что описываетОбщий шаблон объектов одного типаКонкретный экземпляр класса
Роль в программеЗадаёт устройство и правила создания объектовХранит данные конкретной сущности и выполняет действия
СвойстваОпределяет, какие свойства предусмотреныСодержит собственные значения свойств
МетодыЗадаёт доступные объектам действияВыполняет методы, предусмотренные классом
Пример для класса «Автомобиль»Описывает свойства «марка», «цвет», «скорость» и подходящие методыКонкретный автомобиль, например красный автомобиль определённой марки

Сначала найдите в таблице, что именно задаёт класс, а что относится к конкретному экземпляру. Затем сравните строку о свойствах: класс определяет их набор, объект хранит значения. Такой способ помогает не путать описание типа с отдельной сущностью в программе.

Разбор задач

Книги в программе

Условие. Для программы о книгах определить класс, объекты и возможные свойства книги. Нужно отделить общее описание от конкретных экземпляров, а не просто перечислить названия. Рассуждаем так: если сущность может иметь разные значения характеристик, но общий набор характеристик, его удобно описать классом.

  1. Определяем тип сущности: программа работает с книгами, значит, общий тип назовём «Книга». Это будет класс, в котором задаётся устройство каждой книги. Класс сам не обозначает одну конкретную запись каталога.
  2. Находим отдельные экземпляры: конкретными объектами будут книги из каталога, например «Дубровский» и «Капитанская дочка». Каждому объекту присваиваются его значения свойств. Поэтому название у экземпляров отличается, хотя тип у них один.
  3. Выбираем нужные сведения: название, автор, год издания и ISBN могут быть свойствами. Их стоит включать, если эти данные нужны для поиска или показа книги. Действие вроде «найти книгу» не является свойством, поскольку обозначает операцию.

Ответ. Класс — «Книга», а объекты — отдельные книги каталога. Возможные свойства: название, автор, год издания и ISBN; у каждого объекта будут свои значения.

Банковский счёт

Условие. Спроектировать класс «Банковский счёт»: назвать его данные и действия. Сначала отделим то, что описывает текущее состояние счёта, от операций, меняющих это состояние. Такое разделение делает поведение класса понятным и предотвращает смешение сведений с командами.

  1. Выбираем свойства, необходимые программе: номер счёта, владелец и текущий баланс. Это данные конкретного счёта, поэтому у двух объектов класса значения могут различаться. Если задача не требует хранения дополнительных сведений, добавлять их не нужно.
  2. Определяем методы: пополнить счёт, снять деньги и получить баланс. Пополнение и снятие изменяют данные, а получение баланса возвращает значение для показа. Это действия, поэтому они относятся к методам, а не к свойствам.
  3. Проверяем, используют ли методы данные объекта. Пополнение должно увеличить его баланс на разрешённую сумму, а снятие — уменьшить, если операция допустима. Проверка допустимости помогает не допустить состояния, которое противоречит правилам программы.

Ответ. Свойства класса «Банковский счёт» — номер, владелец и баланс. Его методы — пополнение, снятие средств и получение баланса; конкретный объект хранит данные одного счёта.

Прокат велосипедов

Условие. Описать классы «Велосипед» и «Клиент», их объекты и взаимодействие при выдаче велосипеда. Здесь важно не свести разные сущности к одному объекту: у велосипеда и клиента разные сведения и ответственность. Затем нужно связать их так, чтобы программа могла оформить выдачу.

  1. Для класса «Велосипед» задаём свойства: номер, модель и признак доступности. Возможные методы — проверить доступность и отметить выдачу или возврат. Конкретные велосипеды проката будут объектами этого класса со своими номерами и состоянием.
  2. Для класса «Клиент» задаём свойства, например имя и идентификатор. Его объекты представляют зарегистрированных клиентов, а метод может отправить запрос на аренду. Не следует помещать сведения о состоянии велосипеда в объект клиента, потому что это данные другой сущности.
  3. При выдаче клиент обращается к системе с запросом, а система вызывает проверку доступности велосипеда. Если велосипед свободен, его объект меняет состояние на «выдан» и программа связывает выдачу с клиентом. Если он занят, выдача не оформляется, поскольку проверка метода не разрешила операцию.

Ответ. «Велосипед» и «Клиент» — классы, а конкретные велосипеды и люди — их объекты. При выдаче методы проверяют доступность и меняют состояние велосипеда, а данные связывают оформленную аренду с нужным клиентом.

Типичные ошибки

Путать класс и объект. Ошибка возникает, когда название типа принимают за конкретный экземпляр: например, считают класс «Автомобиль» одним автомобилем. Класс задаёт описание, а объект представляет отдельную машину с конкретными данными. Проверьте себя вопросом: можно ли назвать для этого элемента конкретный цвет или номер? Если да, речь, скорее всего, об объекте.

Называть действие свойством. Так происходит, если смешать характеристику сущности и то, что она делает. «Баланс» — свойство счёта, а «пополнить» — метод, потому что это действие меняет данные. Чтобы проверить выбор, спросите: это значение можно хранить или это операция, которую выполняет объект?

Считать значения свойств одинаковыми у всех объектов класса. Путаница появляется потому, что объекты имеют одинаковый набор характеристик и методов. Но экземпляры отличаются собственными данными: у двух велосипедов разные номера, хотя оба созданы по одному классу. Проверьте, описываете ли вы правило для всех экземпляров или значение конкретного объекта.

Сводить ООП только к созданию классов. Можно объявить много классов, но не получить понятную программу, если объекты не взаимодействуют и не распределяют работу. Это происходит, когда внимание уделяют формальному описанию типов, а не решению задачи. Проверьте себя: понятно ли, кто хранит нужные данные, кто выполняет действие и через какой метод части программы взаимодействуют?

Связь с другими темами

Для понимания ООП полезно знать переменные и типы данных: свойства хранят значения определённых типов. Функции помогают понять, как задаются действия, а организация программного кода — как разносить их по частям. В ООП действия оформляются как методы, связанные с объектами. Классы и объекты пригодятся при изучении языков программирования, моделировании предметных областей и разработке крупных программ, где нужно распределять ответственность между компонентами.

Что запомнить

  • Класс описывает общий шаблон объектов.
  • Объект — конкретный экземпляр класса.
  • Свойства характеризуют состояние объекта.
  • Методы задают действия объекта.
  • Объекты программы могут взаимодействовать друг с другом.
  • ООП помогает моделировать предметную область средствами программы.

Частые вопросы по теме

Чем объект отличается от класса?

Класс — общее описание того, какие свойства и методы будут у объектов определённого типа. Объект — конкретный экземпляр этого класса со своими значениями свойств.

Может ли у объектов одного класса быть разное значение одного свойства?

Да. Например, у объектов класса «Книга» одинаково предусмотрено свойство «название», но у каждой книги своё название. Общими являются устройство и набор методов, а не значения свойств.

Как понять, что следует сделать свойством, а что — методом?

Спросите, описывает ли понятие состояние или характеристику объекта. Если да, это обычно свойство; если обозначает действие, которое объект выполняет, — метод.

Зачем объединять данные и действия в объекте?

Так связанные сведения и операции находятся рядом, поэтому код проще организовать и изменять. Метод может работать с данными своего объекта, не заставляя остальные части программы напрямую управлять его внутренним устройством.

Обязательно ли использовать ООП при написании любой программы?

Нет. Для небольшой задачи может быть достаточно последовательности команд и функций. ООП особенно полезно, когда у программы много сущностей, данных и взаимодействий, но выбор подхода зависит от задачи.

Спросить по теме параграфа

§ 46. Что такое ООП?

Эта же тема в других учебниках

Учебник

Оглавление →
Предмет
Информатика
Класс
11 класс
Учебник
"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.