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

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

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

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

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

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

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

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

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

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

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

  1. Аноним:

    Почему к предыдущей статье комментариев туча, а к этой целых ни одного?

    Замечательная же статья!

    Спасибо, что помогаете бедным студентам (да и всем заинтересовавшимся данными тематиками) такими простыми, понятными и сопровождающимися кодом объяснениями. Это просто лучший сайт для освоения азов.

  2. Аноним:

    А также, в листинге #2 в строке 20 заметила ошибку в тексте комментария.

    Вместо «Petr — Это переменная-объект, описанная классом Ivan» должно быть конечно же «Ivan — Это переменная-объект, описанная классом Man». Ну и соответственно в следующих листингах эта же ошибка повторяется.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

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

https://www.litres.ru/marina-polubenceva/c-c-procedurnoe-programmirovanie/?lfrom=15589587
Яндекс.Метрика