Классы. Продолжаем знакомиться. Методы классов

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

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

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

Листинг #2 не очень удобен для использования. Его можно сделать лучше.

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

Теперь можно очень просто сохранять имена в переменные-объекты. Часть кода я убирал, чтобы она не отвлекала вас. Верну убранную часть кода назад. Стало намного удобнее производить управление объектами.

Для красивого вида были исправлены функции eat и sit. У нас получилось небольшое несоответствие: имена в коде не отображают действительные имена, пишемые при вводе их с клавиатуры. Но это не страшно. Важно понимать, что когда пишешь код, должен легко определять действительно нужный объект. Для пользователя интерес представляет имя, которым оперирует он. Т. е. если пользователь ввёл "Вася", то и ждёт Васю.
Классы удобны тем, что можно очень просто оборачивать серию действий одного объекта в одну функцию. Например, мы могли бы написать программу, имитирующую человека, севшего за стол покушать:

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

Это называется изоляцией или сокрытыием данных. Такое сокрытие часто называют инкапсуляцией. Инкапсуляция не ограничивается размещением чего-то в приватную секцию класса. Вам сейчас важнее осознать, что если объект не должен быть наделён отдельными умениями, из которых строится внутренний механизм работы объетка, воплощающего некоторый класс, то описываемые в классе умения не должные быть доступными объекту закрываются в приватной секции класса. Сокрытием ненужных частей вы оберегаете прежде всего себя, как программиста, от возникновения возможных ошибок при развитии кода. Благодаря сокрытию данных нам не нужно знать внутренне представление объекта, достаточно знать открытые умения, чтобы управлять объектом.
Часто ошибочно С++ называют объектно-ориентированным языком. В действительности язык С++ многопарадигменный, умеет поддерживать ООП, но не является объектно-ориентированным языком программирования. Написание программы с классами совсем не обозначает, что используется ООП. Классы представляют собой только средства, помогающие реализовывать программы в ООП стиле.
Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Добавить комментарий

Ваш e-mail не будет опубликован.

96 − = 88

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/kollektiv-avtorov/zadachi-po-programmirovaniu-11252207/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Кошки стали умнее людей — не регистрируются вконтакте, не заводят твиттер

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок