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

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

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

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

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

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

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

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

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

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

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

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

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

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

Comments

comments

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

  • Дмитрий

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

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

  • Алексей

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

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

  • Алексей

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

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

  • Алекс

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

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

  • Дмитрий

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Уляна

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

  • Игорь

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

  • Игорь

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

  • Ирина

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

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

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

  • Александр

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

  • Антон

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

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

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

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

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

Leave a reply:

Site Footer

Sliding Sidebar

About Me

About Me

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

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

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

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

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

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

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

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

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