ООП для “чайников”. Классы и объекты.

Недавно сделал для себя открытие, — оказывается не все хорошие программисты чётко понимают такую важную вещь как принципы объектного-ориентированния, без которого в современном программировании даже плюнуть некуда. Постараюсь восполнить этот пробел на простых примерах, как говорится «на пальцах».
Начнем с самого базового понятия, — класса. Класс, он же тип, чтобы не мучить, и не сбивать с толку формулировками, можно объяснить на примере: класс это Собака, либо Кошка, либо Мышка, — всё это классы. А вот Жучка, Мурчик и Микки-Маус, — это экземпляры классов Собака, Кошка, Мышка. Экземпляры классов еще называют объектами. Итак, – Жучка это экземпляр класса Собака, Мурчик, — экземпляр класса Кошка, а Микки-Маус, — экземпляр класса Мышка, другими словами объект. Класс — единственный и неповторимый. У вас могут быть классы очень похожие, как овчарка и доберман, но это всё равно разные классы, хоть и очень похожие. Класс представляет собой набор характеристик/свойств, которые описывают его состояние и действия/методы, которые он может выполнить. Например, — нас есть класс Овчарка, к числу её свойств можно отнести «возраст» и «кличку». Экземпляр класса может выполнять действия, описанные в классе (лаять, сидеть, лежать), а также содержит значения свойств класса (класс Овчарка имеет свойство «возраст», а объект Барбос имеет значение, — 3 года). Помимо свойств и методов, объект имеет собственное имя, не путать со свойством «кличка», вот как это может выглядеть:

МояСобака.кличка = "Барбос"

Что означает, что у объекта «МояСобака», есть кличка, и эта кличка — Барбос. А бывает и такая ситуация:

ХозяинСобаки.имя = "Василий"
ХозяинСобаки.отчество = "Иванович"

Тут у нас объект «ХозяинСобаки», у которого свойство «имя» имеет значение «Василий», а отчество равно «Иванович».
Похожим образом работают методы (действия) объектов, например:

МояСобака.лежать()
МояСобака.сидеть()

Методы могут параметризироваться, например, мы знаем что метод «лаять» заданное количество раз:

МояСобака.лаять(3)

Объект всегда должен быть создан. Класс существует как факт, то есть, всегда. Создание объекта выглядит в разных языках программирования по-разному, хотя чаще всего это выглядит так:

МояСобака = new Собака()

Так создается новый экземпляр класса Собака. Иногда он может параметризироваться дополнительной информацией, необходимой для объекта (зависит от реализации класса):

МояСобака = new Собака("Барбос")

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

Comments

comments

31 comments On ООП для “чайников”. Классы и объекты.

  • Дмитрий

    Здравствуйте! Меня зовут Дмитрий. Я недавно начал заниматься програмированием и уже несколько дней пытаюсь найти хорошее объяснение ООП. Прочитал много статтей и объяснений на эту тему, и считаю, что на сегодня для меня этот пример “на пальцах” самый лучший для понимаю ООП. Большое спасибо автору!

  • Спасибо Дмитрий, рад что пригодилось. Почитай другие статьи, должно быть тоже интересно.

  • Алексей

    ммм, оригинальное объяснение, именно на пальцах и именно для чайников, таких как я.

    Спасибо большое – пойду читать другие статьи…

  • Алексей

    Можно глупую просьбу: в таком же стиле “для чайников” на пальцах объяснить понятие интерфейса в ооп.

  • Хороший вопрос, вот тут я попытался ответить на него, пишите если что непонятно.

  • Алекс

    Большое спасибо!!! Вот теперь можно и начинать детально учить ООП:) Очень помогла статья, просто и доступно! Спасибо автору:)

  • Ну и отлично. Рад что пригодилось.

  • Дмитрий

    Отличная статья! Для тех кто только только начинает интересоваться ООП – самое оно;) Текст воспринимается очень легко, а также считаю что очень хорошо, когда примеры написаны не на каком-то конкретном языке программирования. Так легче понимать суть и не задаваться вопросом а что это за синтаксис

  • Спасибо Вам, sheremetov. Действительно, легко и понятно. Конечно, я соглашусь, что какой-то продвинутый пользователь недовольно сморщится, прочев такое объяснение ООП, мол это же все настолько серьезно, что данная статья не открывает/раскрывает/обучает … и т. д.
    Я рад, что попал на такое объяснение. Главное, что я понял суть, сам смысл ООП. Теперь, читая более продвинутые объяснения, я уже буду знать, что и о чем идет речь.
    Примеры с животными – лучше, по моему, не придумаешь. У Вас дар объяснять сложное просто.
    Извините, что так много написал.

  • Спасибо, за позитивный отклик. Такие отзывы, придают сил и желания делать и писать. Спасибо, большое.

  • А может ли класс содержать другие классы? Т.е. возьмем для примера класс текст, в нем класс абзац. в классе абзац класс предложение (утверждение, вопросительное, прямая речь)+ внутри предложения (деепричастные обороты, перечисления), внутри предложения класс слово(сущ,глагол, склонения и прочее), возможна ли такая структура, или её как то иначе стоит реализовывать?

  • Хороший вопрос Taker!
    Конечно может, – это называется композиция и в простом приближении можно представить в виде матрешки. Другой аспект этого вопроса в том, что если делать как вы говорите, – создавая для каждого класса параграфа, класс с символом, с классами форматирования внутри, – получится весьма громоздкая структура, и на практике целиком так документ не создается а обрабатывается “на лету”, в зависимости от ситуации и нужной глубины проработки. Так что вопрос реализации зависит от аппаратных требований, запросов к системе, и конечно же, – бюджета и отведенного времени :)

  • Спасибо! Блог в закладки, однозначно!

  • Благодарю за статью…,
    Действительно очень толково и понятно описаны принципы строения ООП

    Хотя было бы очень хорошо подобным образом (на пальцах – однако понятно ) изложить
    “Ключевые черты ” такие как Полиморфизм, Инкапсуляция, Наследования и назначение “Конструктора” в этой пьесе.

    P.S. Спасибо , давно искал такую статью

  • Спасибо, про стальное можно еще почитать тут:
    http://sheremetov.com/oop/oop-for-dummie/

  • Отличная статья !!! Большое спасибо автору.

  • Дуже дякую за статтю – ви дійсно гарно вмієте пояснити :)

  • Отличное разжевывание ООП.
    Молодец!

  • Уляна

    Афігєнна стаття.

  • Игорь

    Спасибо огромное! Предельно ясно, яснее, наверное, и некуда уже. А нет у Вас такой же статьи, объясняющей, что такое инкапсуляция и полиморфизм? Сколько ни читал, нигде не объясняется так, чтобы понять физический смысл.

  • Игорь

    Вот спасибо, добрый человек! И здесь всё понятно стало.

  • Ирина

    Спасибо огромное! Давно искала такое объяснение, а то везде советуют “представьте окружающий мир с точки зрения ооп”, а как это сделать новичку, который только открыл учебник и читает первую тему по ооп? В общем спасибо еще раз, буду читать дальше.

  • Успехов, Ирина!

  • У меня после прочтения многое прояснилось. Спасибо автору.

  • Александр

    Спасибо автору! Реально-зачетная статья!

  • Антон

    Спасибо. Помогло в понимании.

  • Лучшее введение кратко и простым языком о классах и объектах. Из найденного за пару часов в интернете, Ваша статья лучшая для восприятия и понимания. Спасибо большое!

  • Спасибо, очень рад что пригодилось

  • Мне очень помогли ваши статьи, спасибо !

  • Только надо на самом главном языке дать пример – на С++.

Leave a reply:

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Site Footer

Sliding Sidebar

About Me

About Me

Для кого этот блог?

Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.

Что заставило меня создать его?

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

Немного о себе.

Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.

Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:

e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом

Прочая онлайновая деятельность: