Объектно-ориентированное программирование за пределами просто методов? - PullRequest
5 голосов
/ 19 августа 2010

У меня очень ограниченное понимание ООП.

Я программирую в .Net уже год или около того, но я полностью самоучка, поэтому некоторые из применений более тонких моментов ООПпотеряны для меня.

Инкапсуляция, наследование, абстракция и т. д. Я знаю, что они имеют в виду (поверхностно), но как они используются?

Я когда-либо использовал ООП только для повторного использованиякод в методы, но я знаю, что мне не хватает многих функциональных возможностей.

Даже классы - я создавал реальный класс только два или три раза.Скорее, я обычно просто включаю все свои методы в MainForm.

Ответы [ 6 ]

4 голосов
/ 19 августа 2010

ООП слишком сложно для объяснения в ответе StackOverflow, но основная идея такова:

Процедурное программирование - это написание кода, который выполняет действия с данными. Объектно-ориентированное программирование - это создание данных, которые выполняют над собой действия.

В процедурном программировании у вас есть функции и у вас есть данные. Данные структурированы, но пассивны, и вы пишете функции, которые выполняют действия с данными и ресурсами.

В объектно-ориентированном программировании данные и ресурсы представлены объектами, которые имеют свойства и методы. Здесь данные больше не являются пассивными: метод - это средство указания данным или ресурсу выполнить какое-либо действие над собой.

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

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

Кроме того, концепции объектов, наряду с использованием наследования и компоновки, позволяют моделировать ваши данные структурно в вашем коде. Если вам нужны данные, представляющие сотрудника, вы создаете класс Employee. Если вам нужно работать с ресурсом принтера, вы создаете класс Printer. Если вам нужно нарисовать кнопки в диалоге, вы создаете класс Button. Таким образом, вы не только достигнете большей модульности, но и ваши модули будут отражать полезную модель любых реальных вещей, с которыми ваша программа должна работать.

2 голосов
/ 19 августа 2010

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

У меня был такой же сценарий, и я тоже самоучка. Я следовал этим шагам, и теперь я начал получать знания о реализации ООП. Я делаю мой код более модульным, лучше структурированным.

2 голосов
/ 19 августа 2010

Вы можете попробовать это: http://homepage.mac.com/s_lott/books/oodesign.html Это может помочь вам понять, как проектировать объекты.

0 голосов
/ 19 августа 2010

Я изучил ООП, используя Turbo Pascal, и сразу нашел его полезным, когда пытался моделировать физические объекты.Типичные примеры включают объект Circle с полями для определения местоположения и радиуса и методами для рисования, проверки, находится ли точка внутри или снаружи, и другими действиями.Я думаю, вы начинаете думать о классах как об объектах, а методы как о глаголах и действиях.Процедурное программирование похоже на написание сценария.Часто это линейно и шаг за шагом следует, что нужно сделать.В мире ООП вы создаете доступный набор действий и задач (например, фрагменты lego) и используете их, чтобы делать то, что вы хотите.

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

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

0 голосов
/ 19 августа 2010

Очень кратко: вместо того, чтобы выполнять операции с данными в разных местах, вы просите объект выполнить свою работу, не заботясь о том, как он это делает.

Полиморфизм: разные объекты могут делать разные вещино дайте им то же имя, чтобы вы могли просто попросить любой объект (определенного супертипа) выполнить свою задачу, попросив любой объект этого типа выполнить эту именованную операцию.

0 голосов
/ 19 августа 2010

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

http://accu.informika.ru/acornsig/public/articles/ood_intro.html

http://www.fincher.org/tips/General/SoftwareEngineering/ObjectOrientedDesign.shtml

http://www.softwaredesign.com/objects.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...