Ответы пользователя по тегу ООП
  • Где можно прочитать про всю суть ЯПов под капотом?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    В каждом языке детали отличаются.
    Операторы не просто функции, это как бы понятно, ибо некоторые операторы это вообще только часть структуры, и функцией быть не может.

    Что вы вообще спрашиваете? Какой смысл?
    у вас надерганы термины из разных источников, и видимо из источников описывающих разные языки программирования, отсюда и каша.
    Выберите конкретный язык и прочитайте про его терминологию. Потом про другой.
    Прошло уже 100+ лет с начала программирования, появились новые сущности, которые не подпадают под старую классификацию.
    Ответ написан
    Комментировать
  • Как понять что я готов к ООП?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    ООП это просто парадигма программирования, которая объединяет данные вместе с методами, которые работают с этими данными напрямую, в классы.
    Классы взаимодействуют друг с другом через методы, а не через прямой доступ к переменным. Так достигается инкапсуляция.

    Все, теперь ты знаешь что такое ООП.

    А учить нужно стандартные библиотеки, классы и популярные паттерны, и это уже на практике, и всю жизнь.
    Ответ написан
    Комментировать
  • На каком этапе обучения стоит учить ООП?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    ООП это не та тема, которую изучил между for и while
    это довольно большой и комплексный кусок знаний, который в любом случае придется учить долго.
    Поэтому раньше начнешь - раньше будет результат.
    Ответ написан
    Комментировать
  • Как начать понимать UML-схемы?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    А может быть их и не нужно понимать, т.к. их редко используют?

    Именно так.
    Если часто будешь использовать, научишься понимать.
    Если редко - будешь разбираться, а потом забывать.

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

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Сейчас же я захотел переделать код, начав с соблюдения принципа «один класс - одна задача»

    Почему? Откуда взялся этот принцип?

    Следуйте следующим принципам:
    1) данные, которые находятся внутри класса обрабатывались методами этого класса
    2) Избегайте суперклассов (слишком больших классов, которые не помещаются в голову одного программиста, и вызывают много конфликтов при поддержке приложения)
    3) Соблюдайте баланс между первыми двумя пунктами.

    Учитывая, что вы единственный разработчик, то нет смысла делить класс на несколько, даже если он великоват.
    Если у вас есть визуализация этапов, можно было бы разве что в отдельный класс вывести эту визуализацию. А так - скорее всего у вас все хорошо. Может быть названия методов пересмотреть и все.
    Ответ написан
    Комментировать
  • Правильно ли я понимаю ООП?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Лошади - сколько молока дает

    В общем я запутался


    Это точно.
    Ты сейчас разбираешь структуры данных, а ООП это больше про методы и инкапсуляцию.
    Чтобы делать учет животных вообще не обязательно для них класс делать, храни все в базе, учет веди sql запросами, например.

    P.S.
    собаки тож есть, но их доить вроде не будем и мяса не дают они(

    Смотря из какой ты страны..
    Ответ написан
    Комментировать
  • Лучший путь с точки зрения ООП?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Вся суть ООП заключается в том, что снаружи нельзя работать с любыми данными класса, только через методы.
    Ответ написан
    Комментировать
  • Типы данных это классы в ООП?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Не заморачивайся на чем написан питон и с ООП или не ООП написан он сам.
    Но если ты читал хотя бы введение в питон, ты бы узнал, что в Питоне все является объектами, а следовательно все типы данных это классы.
    Ответ написан
    Комментировать
  • Хорошей ли аналогией для ООП является таксономия живого мира?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    наследование это вообще лишь маленький кусочек ООП.
    Ответ написан
    Комментировать
  • Для чего абстракции в ООП?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D...

    Например, чтобы сделать несколько специализированных классов со специфичными методами/свойствами, но не дублировать все базовые (одинаковые свойства), которые выносим в абстрактный класс и наследуем от него
    Ответ написан
  • Зачем нужно ООП?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Раньше программа могла быть написана одним сплошным листингом. Но при попытке сделать изменения, оказалось что очень сложно понять все зависимости внутри программы, как только ее размер превышает некоторый критический уровень.
    Появилась мода на модульность.
    Но программы стали сложнее, и уже модуль перестал помещаться в мозг одного человека, чтобы можно было его быстро править.
    В процессе различных подходов, был придуман ООП-подход, суть которого заключается в следующем:

    Раз все программы оперируют некоторыми данными, то нужно взять эти данные, взять функции (методы), которые работают с этими данными и поместить в один объект.
    Если нужно будет изменить тип данных, добавить/отнять/поделить функционал, то программист будет работать с одним этим объектом. При этом, если разные объекты запрашивают что-либо друг у друга, то в ООП довольно легко сделать версионность и обратную совместимость.

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

    Программы поменьше, особенно те, которые могут быть написаны одним человеком, могут писаться как угодно, но чем больше программа, тем сложнее ее поддерживать, а ООП - один из самых доступных методов "поделить" программу на независимые инкапсулированные кусочки.
    Ответ написан
    Комментировать
  • Что использовать throw + try/catch или if + return?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Разница между if/else в том, что его нужно каждый раз после каждой операции на каждом ее этапе ставить, чтобы делать проверку.

    А try/catch вы вешаете на весь блок, причем сразу отлавливаете разные события.

    Если для вас важна производительность, то if/else быстрее
    Ответ написан
    Комментировать
  • Какие проблемы в программировании решает ООП?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    ООП позволяет программистам писать не программу целиком, а отдельные объекты.
    Если вы наймете 1000 программистов чтобы написать одну программу в процедурном стиле, у вас огромное количество человекочасов уйдет просто на решение конфликтов и ожидание друг друга.
    Но в ООП можно сраза архитектурно разделить написание программы на независимые объекты, и программисты смогут работать практически не мешая друг другу.

    Для маленьких программ ООП не обязателен, но если ты уже опытный программист, тебе будет просто пользоваться ООП для всего подряд.
    Ответ написан
    Комментировать
  • Что "научного почитать об ООП"?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    ООП это именно методология проектирования программ. Он был создан и развивается именно для этого - чтобы упростить разработку крупных проектов.

    Формальная логика там присутствует потольку поскольку. И никакой дополнительной логики в этом искать не нужно - это будет не практично. Реализация ООП подгоняется и меняется в соответствии с практическими требованиями, а не математикой. Собственно отсюда и идут постоянные споры.
    Ответ написан
    8 комментариев
  • Где брать примеры хорошего ООП?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Если у вас проблема с тем, как делить код на объекты, это означает, что
    1. Вы плохо продумали архитектуру проекта, либо вообще плохо представляете что должен делать проект.

    2. Мало опыта - в таком случае не парьтесь, просто пишите код как можете. опыт придет с набиванием шишек, когда будете рефакторить код и понимать что наверное надо было вот так изначально разбить, чтобы сейчас было проще.

    3. ООП был придуман как выход для написания крупных приложений, которые пишутся большим количеством программистов. В отличие от модульного программирования ООП позволяло не только разбить код на отдельные куски, но еще и сделать эти куски инкапсулированными независимыми "объектами", каждый из которых может поместиться в голову среднестатистического программиста, чтобы упростить процесс разработки.
    Это одна из причин, почему ООП достаточно сложно освоить на маленьких проектах.
    Ответ написан
    Комментировать
  • В каких случаях требуются public, protected, private -методы?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Например, потому что могут быть методы, которые вызываются только внутри этого класса. И очень полезно, чтобы снаружи они были недоступны.

    Если создаешь Public методы - это означает что кто-то может его использовать. И в случае крупного продукта - это может быть другой программист, а может даже другая программа. И если в будущем захочешь модернизировать, то со всеми public методами нужно думать про версионирование и legacy саппорт.
    Ответ написан
    Комментировать
  • Зачем писать в ООП стиле в JS?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    1. Не путайте функциональное программирование с процедурным (императивным). Это ВООБЩЕ разные вещи.
    2. ООП это парадигма, которая хорошо работает в крупных проектах и облегчает дальнейшую разработку и поддержку продукта.
    3. ООП позволяет инкапсулировать значительную часть кода в практически независимые объекты, что позволяет распределить разработку на несколько программистов, практически без потери производительности. В Императивном программировании это будет вызывать на порядки больше конфликтов, а объекты - в этом плане достаточно независимы, поэтому достаточно раздавать программистам задачи так, чтобы в один объект не лезло два программиста. Именно третье - самое главное в ООП. ВСЕ крупные продукты, где нужно скооперировать хотя бы 10-20 программистов без ООП будет очень печально, не говоря уж о продуктах, где нужны сотни людей.

    Ну и все дальнейшее развитие ООП вылезло уже как попытка улучшить парадигму, упрощая и добавляя полезные удобные штуки таким образом, чтобы пункты 2-3 соблюдались.
    Ответ написан
    5 комментариев
  • Что почитать и на чем потренироваться, не могу перейти от процедурного к ооп?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Объект - это некоторые данные (в первую очередь), и методы которые работают с этими данными.

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

    Нужно понять зачем нужен ООП. В небольших проектах он не нужен. В проектах, над которыми работает больше 1-3 человек - уже полезен. А в крупных - необходим, иначе в принципе не получится организовать работу большого количества людей над одной программой, без инкапсуляции, для чего и придумали ООП.
    Ответ написан
    Комментировать
  • Стек технологий, который нужно знать С++ разработчику?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Не знаю, насколько вы разбираетесь в общем Computer Essential, но вы знаете, что на русском языке можно писать детективы и фантастику, можно писать исторические экскурсы с реальными данными и документалистикой, можно писать журналистские новости, можно писать анекдоты и шутки - и все это всего лишь на русском языке.

    Тоже самое и с любым языком программирования - смотря куда устроитесь, те технологии предпочтительнее изучать. С++ используется широко и для embedded и для системного программирования и для десктоп приложений и для game development и для различных плагинов/расширений. И везде могут быть свои технологии.

    Пилите свои любые проекты, чтобы получить опыт завершенного продукта.
    sql нужен вообще везде.
    Ответ написан
    Комментировать
  • Как с точки зрения ООП реализовать проверку доступов?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    "Конкретный вопрос: Собака должна знать что её может гладить дресеровщик , или она должна спрашивать у человека может ли он её гладить? "
    Это вопрос к вам, а не к коду.

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