Зачем нужны объекты в написании программ?

Вопрос следующий, для чего нужны объекты в написании программ? Зачем создавать что-то отдельное, если можно добавлять static методы? Погуглив немного, наткнулся на пример - продукты в магазине, есть класс Product и объекты этого класса - более конкретно описанные продукты. НО зачем создавать отдельные объекты класса Product, если можно сделать несколько классов наследников Product, например Juice extends Product, AppleJuice extends Juice и так далее, расписывая нюансы непосредственно в классах. Заранее спасибо


Ответы (2 шт):

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

Классический пример - это класс Car, (автомобиль), у которого есть такие характеристики, как фирма - произодитель, цвет, количество дверей, ёмкость бензобака, кол-во бензина в баке, расход на 100 км, скорость и т.п. Примером метода может быть "заправить" или "залить столько то литров в бак" (вообще хороший пример, потому что может возращать exception при превышении объема бака) , в результате чего у экземпляра объекта поменяется свойство "кол-во бензина в баке"

  1. Давайте в качестве первого шага разберем разницу между классом и экземпляром класса. Класс - это как бы "обобщенный автомобиль". Экземпляр - это "конкретный автомобиль" - маленький мерседес-купе 520-й модели, небесно голубого цвета.

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

  3. Критике ООП подхода почти столько же лет, как самому подходу. Классической уже стала фраза "Вам нужен был банан, но вы получили гориллу, держащую банан, и целые джунгли впридачу." (по моему, это слова Джо Армстронга, создателя языка Эрланг).

  4. Мне нравится, что терминология ООП проникла в художественную литературу: в книге "Рабы Майкрософта" Дуглас Коупленд пишет (словами одного из своих героев): "«Ооп!» — это виртуальный конструктор. Бездонная коробка объемных блоков, похожих на лего..."

Ну, и для настроения - картинка на тему:

Полиморфизм, инкапсуляция, наследование

→ Ссылка
Автор решения: Egor Randomize

Можно. Но тогда у тебя будет по одной сущности на класс. Два одинаковых хлеба ты сделать не сможешь. Классы на то и созданы, чтобы быть некой абстракцией с конкретностью, ограниченной лишь самими параметрами класса и некоторой реализацией (что отличает классы от интерфейсов).

Статические методы и свойства - особый тип. На проде их использование трижды обдумывается.

Таким образом, если тебе требуется лишь один экземпляр класса, который и классом то назвать язык не поворачивается (например, какой-нибудь идемпотентный маппер), можешь смело прибегнуть к статике.

А вообще, согласен с ответом выше. Но хотел как-то разжевать и упростить его.

→ Ссылка