Зачем нужны объекты в написании программ?
Вопрос следующий, для чего нужны объекты в написании программ? Зачем создавать что-то отдельное, если можно добавлять static методы? Погуглив немного, наткнулся на пример - продукты в магазине, есть класс Product и объекты этого класса - более конкретно описанные продукты. НО зачем создавать отдельные объекты класса Product, если можно сделать несколько классов наследников Product, например Juice extends Product, AppleJuice extends Juice и так далее, расписывая нюансы непосредственно в классах. Заранее спасибо
Ответы (2 шт):
- ООП вообще - это (спорная, но такая уж она есть) попытка "эмулировать реальный мир" программными средствами. Основными правилами такой эмуляции становится вот что: экземпляры объектов - это как экземпляры "предметов реального мира", при этом все экземпляры одного класса соответствуют предметам, относящимся к одному "классу" в реальном мире. Свойства экземпляра ("поля") - это характеристика реального предмета. Методы экземпляра - это как бы "действия", которые можно делать с предметом.
Классический пример - это класс Car, (автомобиль), у которого есть такие характеристики, как фирма - произодитель, цвет, количество дверей, ёмкость бензобака, кол-во бензина в баке, расход на 100 км, скорость и т.п. Примером метода может быть "заправить" или "залить столько то литров в бак" (вообще хороший пример, потому что может возращать exception при превышении объема бака) , в результате чего у экземпляра объекта поменяется свойство "кол-во бензина в баке"
Давайте в качестве первого шага разберем разницу между классом и экземпляром класса. Класс - это как бы "обобщенный автомобиль". Экземпляр - это "конкретный автомобиль" - маленький мерседес-купе 520-й модели, небесно голубого цвета.
Всё дальнейшее в ООП - происходит уже из практики программирования и решения практических задач. Как оказывается, есть много случаев, когда нужно создавать классы с похожей функциональностью. Тогда используется наследование, композиция, и т.п. На эту тему есть, по моему, прекрасная статья - это, можно сказать, "описание всего ООП в миниатюре".
Критике ООП подхода почти столько же лет, как самому подходу. Классической уже стала фраза "Вам нужен был банан, но вы получили гориллу, держащую банан, и целые джунгли впридачу." (по моему, это слова Джо Армстронга, создателя языка Эрланг).
Мне нравится, что терминология ООП проникла в художественную литературу: в книге "Рабы Майкрософта" Дуглас Коупленд пишет (словами одного из своих героев): "«Ооп!» — это виртуальный конструктор. Бездонная коробка объемных блоков, похожих на лего..."
Ну, и для настроения - картинка на тему:
Можно. Но тогда у тебя будет по одной сущности на класс. Два одинаковых хлеба ты сделать не сможешь. Классы на то и созданы, чтобы быть некой абстракцией с конкретностью, ограниченной лишь самими параметрами класса и некоторой реализацией (что отличает классы от интерфейсов).
Статические методы и свойства - особый тип. На проде их использование трижды обдумывается.
Таким образом, если тебе требуется лишь один экземпляр класса, который и классом то назвать язык не поворачивается (например, какой-нибудь идемпотентный маппер), можешь смело прибегнуть к статике.
А вообще, согласен с ответом выше. Но хотел как-то разжевать и упростить его.
