"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Объектно-ориентированное программирование (ООП) — способ строить программу как набор взаимодействующих объектов. Каждый объект объединяет данные о конкретной сущности и действия, которые с ней можно выполнять. Общий шаблон таких объектов задаёт класс: он определяет свойства и методы, но не задаёт одинаковые значения для всех экземпляров. ООП помогает представить предметную область в коде и распределить задачи между частями программы.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Объект — сущность программы, объединяющая данные о конкретном экземпляре и действия, которые с ним можно выполнять. Например, объектом может быть отдельная книга с собственным названием. Такое представление позволяет программе работать не с разрозненными значениями, а с цельной сущностью.
Класс — описание общего устройства объектов: их свойств и методов; по классу создают объекты. Класс можно сравнить с проектом, в котором указано, что должно быть у каждого экземпляра. Это нужно, чтобы создавать однотипные объекты по единым правилам, не описывая их устройство заново.
Свойство — характеристика объекта, значение которой хранится в его данных. У книги это могут быть название, автор и год издания. Свойства помогают программе хранить сведения о конкретном объекте и различать экземпляры одного класса.
Метод — действие, заданное в классе и выполняемое объектом. Например, объект банковского счёта может выполнять метод пополнения. Методы нужны, чтобы задавать поведение объекта и связывать операции с данными, к которым они относятся.
При решении небольшой задачи бывает удобно записать команды по порядку: получить данные, выполнить вычисление, вывести результат. Но в сложной программе одновременно появляются разные сущности, у каждой — свои данные и возможные действия. Если хранить всё отдельно, становится трудно понять, к какой сущности относится переменная и какая часть кода должна её менять. Поэтому программу можно организовать как набор объектов, каждый из которых отвечает за свою часть задачи.
Чтобы выделить объекты, сначала рассматривают предметную область — то, о чём должна быть программа, — и находят важные сущности. Например, в системе библиотеки это книги и читатели. Затем для каждой сущности определяют, какие сведения программе нужно хранить и какие действия с ней выполнять. У книги можно хранить название и автора, а действиями сделать получение сведений или отметку о выдаче; так данные и поведение связываются с подходящим объектом.
Для объектов одного типа описывают класс. Например, класс «Книга» задаёт свойства «название», «автор» и метод «получить описание», но сам по себе не является конкретной книгой. Созданные по классу объекты — экземпляры — получают собственные значения свойств: один может называться «Дубровский», другой — «Капитанская дочка». Общий шаблон избавляет от необходимости отдельно придумывать структуру для каждой книги.
Метод выполняет действие, используя данные объекта. Так, метод пополнения счёта должен изменить хранящуюся в объекте сумму, а метод получения баланса — сообщить её значение. Если данные и связанные с ними операции находятся в одном месте, меньше риск случайно изменить состояние объекта несогласованным способом. Такое объединение упрощает чтение программы и помогает менять устройство одной части, не переписывая всё остальное.
Объекты могут решать общую задачу, обращаясь друг к другу через предусмотренные методы. Например, клиент системы проката может запросить велосипед, а объект велосипеда — сообщить, доступен ли он. Внешней части программы не обязательно знать, как именно внутри хранится состояние велосипеда: достаточно вызвать разрешённый метод и получить результат. Сокрытие деталей уменьшает зависимость между частями кода и позволяет менять внутреннюю реализацию, сохраняя способы взаимодействия.
| Признак | Класс | Объект |
|---|---|---|
| Что описывает | Общий шаблон объектов одного типа | Конкретный экземпляр класса |
| Роль в программе | Задаёт устройство и правила создания объектов | Хранит данные конкретной сущности и выполняет действия |
| Свойства | Определяет, какие свойства предусмотрены | Содержит собственные значения свойств |
| Методы | Задаёт доступные объектам действия | Выполняет методы, предусмотренные классом |
| Пример для класса «Автомобиль» | Описывает свойства «марка», «цвет», «скорость» и подходящие методы | Конкретный автомобиль, например красный автомобиль определённой марки |
Сначала найдите в таблице, что именно задаёт класс, а что относится к конкретному экземпляру. Затем сравните строку о свойствах: класс определяет их набор, объект хранит значения. Такой способ помогает не путать описание типа с отдельной сущностью в программе.
Условие. Для программы о книгах определить класс, объекты и возможные свойства книги. Нужно отделить общее описание от конкретных экземпляров, а не просто перечислить названия. Рассуждаем так: если сущность может иметь разные значения характеристик, но общий набор характеристик, его удобно описать классом.
Ответ. Класс — «Книга», а объекты — отдельные книги каталога. Возможные свойства: название, автор, год издания и ISBN; у каждого объекта будут свои значения.
Условие. Спроектировать класс «Банковский счёт»: назвать его данные и действия. Сначала отделим то, что описывает текущее состояние счёта, от операций, меняющих это состояние. Такое разделение делает поведение класса понятным и предотвращает смешение сведений с командами.
Ответ. Свойства класса «Банковский счёт» — номер, владелец и баланс. Его методы — пополнение, снятие средств и получение баланса; конкретный объект хранит данные одного счёта.
Условие. Описать классы «Велосипед» и «Клиент», их объекты и взаимодействие при выдаче велосипеда. Здесь важно не свести разные сущности к одному объекту: у велосипеда и клиента разные сведения и ответственность. Затем нужно связать их так, чтобы программа могла оформить выдачу.
Ответ. «Велосипед» и «Клиент» — классы, а конкретные велосипеды и люди — их объекты. При выдаче методы проверяют доступность и меняют состояние велосипеда, а данные связывают оформленную аренду с нужным клиентом.
Путать класс и объект. Ошибка возникает, когда название типа принимают за конкретный экземпляр: например, считают класс «Автомобиль» одним автомобилем. Класс задаёт описание, а объект представляет отдельную машину с конкретными данными. Проверьте себя вопросом: можно ли назвать для этого элемента конкретный цвет или номер? Если да, речь, скорее всего, об объекте.
Называть действие свойством. Так происходит, если смешать характеристику сущности и то, что она делает. «Баланс» — свойство счёта, а «пополнить» — метод, потому что это действие меняет данные. Чтобы проверить выбор, спросите: это значение можно хранить или это операция, которую выполняет объект?
Считать значения свойств одинаковыми у всех объектов класса. Путаница появляется потому, что объекты имеют одинаковый набор характеристик и методов. Но экземпляры отличаются собственными данными: у двух велосипедов разные номера, хотя оба созданы по одному классу. Проверьте, описываете ли вы правило для всех экземпляров или значение конкретного объекта.
Сводить ООП только к созданию классов. Можно объявить много классов, но не получить понятную программу, если объекты не взаимодействуют и не распределяют работу. Это происходит, когда внимание уделяют формальному описанию типов, а не решению задачи. Проверьте себя: понятно ли, кто хранит нужные данные, кто выполняет действие и через какой метод части программы взаимодействуют?
Для понимания ООП полезно знать переменные и типы данных: свойства хранят значения определённых типов. Функции помогают понять, как задаются действия, а организация программного кода — как разносить их по частям. В ООП действия оформляются как методы, связанные с объектами. Классы и объекты пригодятся при изучении языков программирования, моделировании предметных областей и разработке крупных программ, где нужно распределять ответственность между компонентами.
Чем объект отличается от класса?
Класс — общее описание того, какие свойства и методы будут у объектов определённого типа. Объект — конкретный экземпляр этого класса со своими значениями свойств.
Может ли у объектов одного класса быть разное значение одного свойства?
Да. Например, у объектов класса «Книга» одинаково предусмотрено свойство «название», но у каждой книги своё название. Общими являются устройство и набор методов, а не значения свойств.
Как понять, что следует сделать свойством, а что — методом?
Спросите, описывает ли понятие состояние или характеристику объекта. Если да, это обычно свойство; если обозначает действие, которое объект выполняет, — метод.
Зачем объединять данные и действия в объекте?
Так связанные сведения и операции находятся рядом, поэтому код проще организовать и изменять. Метод может работать с данными своего объекта, не заставляя остальные части программы напрямую управлять его внутренним устройством.
Обязательно ли использовать ООП при написании любой программы?
Нет. Для небольшой задачи может быть достаточно последовательности команд и функций. ООП особенно полезно, когда у программы много сущностей, данных и взаимодействий, но выбор подхода зависит от задачи.
§ 46. Что такое ООП?