Подтвердить что ты не робот

Как я могу стать лучше в ООП?

Это может показаться странным вопросом для многих из вас, и я не знаю, правильно ли сказать ООП в этом контексте, потому что ООП ( объектно-ориентированное программирование) обычно ассоциируется с такими языками программирования, как С++ и Java, а не легкими языками программирования или языками сценариев. Мой вопрос, однако, относится к категории JavaScript, которая также объектно ориентирована. Я знаю об объектах, свойствах, методах, прототипах и конструкторах, я просто не могу понять, когда использовать объекты.

Когда я пишу свои веб-приложения, я по какой-то причине никогда не использую объекты. Меня это раздражает, потому что, когда я читаю об объектах в различных книгах и онлайн-статьях, объекты делают все намного проще, и просто чтобы выразить это, я НЕНАВИСТЬ повторяю, и вот почему Хотелось бы знать, когда использовать объекты.

Я действительно хочу стать лучше при использовании объектов и когда использовать объекты.

Можете ли вы упомянуть несколько ситуаций, что объекты были бы хорошими? Было бы очень приятно записать то, что, как вы знаете, можете вернуться и посмотреть, когда вы смутитесь, когда использовать эти чертонные объекты:)

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


Я действительно надеюсь, что вы поймете мой вопрос, и вы подумаете, что я немного новичок в этом сайте и новичок в JavaScript

Спасибо!

4b9b3361

Ответ 1

Вы, вероятно, используете объекты, даже не осознавая этого.

Если вы пишете Javascript, который взаимодействует с DOM, вы используете объекты.

Если вы используете какую-либо инфраструктуру Javascript (jQuery, MooTools и т.д.), вы используете объекты.

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

И чтобы ответить на вопрос в заголовке вашего сообщения... единственный способ действительно стать лучше в ООП - это практиковать! Чтение и изучение предмета может довести вас до сих пор.

Ответ 2

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

Чтобы обобщить преимущества ООП без написания здесь книги, ООП в основном делает для вас три вещи:

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

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

Объединение # 1 и # 2 позволяет скрыть детали реализации от других объектов. Вы создаете "открытый интерфейс" для класса, набор функций, которые должны вызывать другие объекты, и которые представляют логические вещи, которые выполняет этот класс, а затем любые другие функции, которые вам нужны, могут быть скрыты. (Более явно на некоторых языках, чем в других, но это не так.)

  1. Классы могут наследовать и мутировать. Если у вас есть два одинаковых класса A и B, которые должны быть в основном одинаковыми, но с некоторыми незначительными отличиями, вы можете сделать суперкласс C со всеми распространенными вещами, а затем A и B наследуют от этого, и каждый добавляет в свой собственный уникальный материал. Это то, что обычно рекламируется как сила ООП. Честно говоря, да, это здорово, и в некоторых ситуациях это может быть очень удобно, но я иногда использую его истинную силу, и я подозреваю, что то же самое верно для большинства программистов. (Энтузиасты ООП не стесняются вникать в то, как и почему вы используете наследование все время.)

Когда ООП это? Каждый раз, когда у вас есть несколько частей данных, логически идущих вместе, имеет смысл создать класс для их хранения. Подобно координатам X и Y; или имя клиента, адрес и почтовый индекс; или диапазон фазера и потребление энергии фазером; или что-то еще.

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

Как и когда использовать наследование сложнее. Я оставлю это в другое время.

Ответ 3

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

Одна из хороших вещей в Javascript заключается в том, что она поддерживает множество разных стилей; ООП, императивный и функциональный.

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

Время ожидания в языках, которые более склонны заставлять вас в ООП (даже если некоторые утверждают, что они не должны), здесь полезны. С# и Java заставляют одну линию OOP, хотя С++ не имеет (с той же силой и слабостью здесь, что и с Javascript).

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

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

Ответ 4

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

function BlogPost(id,title,content)
{
    this.id = id;
    this.title = title;
    this.content = content;

    function display()
    {
        var post = $('<div class="blogpost"></div>');
        $(post).append('<h2>' + this.title + '</h2>');
        $(post).append('<p>' + this.content + '</p>');
        var deleteButton = $('<span class="deletePost">delete</span>')
        $(post).append(deleteButton);
        $(deleteButton).click(this.delete)

        $('#postcontainer').append(post);
    }


    function delete()
    {
        $.post('some/xhr/handeler',{id:this.id});
    }
}

Это быстрый (непроверенный) класс, который можно использовать для динамического добавления blogposts в div с id postcontainer и обрабатывает клики по кнопке удаления.

Ответ 5

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

  • Механические часы состоят из ряда шестерен, каждая из которых служит одной цели в общей работе машины. Если вы считаете свое приложение часами, то объектами являются его механизмы.

  • Рабочая группа состоит из нескольких человек, каждый из которых выполняет определенную работу. Люди общаются друг с другом при выполнении своих заданий, а задания падают в двух строках: те, которые выполняют задачи (рабочие), и те, которые организуют и направляют работу других людей (менеджеров).

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

Сделайте каждый класс самодостаточным. вы хотите запечатать его, когда это будет сделано, как элемент управления .NET. Классы должны взаимодействовать друг с другом только через их интерфейсы, которые состоят из свойств и методов. Эти интерфейсы должны иметь минимальный размер (наименьшие общедоступные свойства и методы), которые вы можете придумать. Идея состоит в том, чтобы изолировать побочные эффекты изменения к любому классу только этому классу.

Если вы это сделаете, вы опережаете 80% всех программистов. Вам будет намного легче разрабатывать и поддерживать даже большие приложения, потому что вы сможете разбивать сложные проблемы на простые компоненты.

Ответ 6

Javascript - это просто страшный язык для изучения ООП. Я бы рекомендовал изучать ООП на другом языке (например, Java или С++), а затем изучить объектно-ориентированный синтаксис в Javascript. В этот момент у вас есть все ингредиенты.

Это, когда вы можете решить, хотите ли вы использовать объект для задачи в Javascript или если достаточно использовать только функции.

Лично я в основном пишу не-объект javascript и оставляю объекты, когда задача объектно ориентирована на меня. Например, я использовал объектно-ориентированный дизайн для перетаскивания script, в котором вы просто создали объект DragNDrop с правильными параметрами, и элементы на вашей странице будут перетаскиваться с этого момента или когда я захочу упростить некоторые функции обработки javascript xml, я написал объект, который обернул обычные объекты xml.

Ответ 7

Джастин Нисснер сказал это, и я могу только добавить к его ответу...

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

Ответ 8

По-моему, я думаю, что лучше подумать о ООП в контексте конкретного домена или бизнес-проблемы. Например, JavaScript использует объекты для моделирования поведения браузера и атрибутов, например Window, Frame, History...

A модель домена бизнес-задачи будет содержать объекты, которые будут отражены в программном коде, написанном ООП. Например, приложение для студентов университетов будет иметь предметы для студентов, преподавателей, курсы, учебные программы, комнаты и так далее. Следовательно, начните с своей бизнес-проблемы и смоделируйте домен. Ваш код ООП должен иметь объекты, смоделированные из вашего домена. alt text

Источник: http://csci.csusb.edu/dick/samples/uml0.html

Ответ 9

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

Ответ 10

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

Некоторые простые шаблоны проектирования, которые я могу порекомендовать, начинаются с:

  • Аннотация factory: отложить создание объектов. В JavaScript в большинстве случаев функция выполняет эту работу.
  • Decorator: прозрачно добавлять функциональность к объекту во время выполнения. Также может быть вложен. Пример использования: ведение журнала
  • Composite: обрабатывать дерево/график объекта, как отдельный объект.

Ответ 11

Недавно я работал над веб-приложением, которое требовало бы большой Javascript на стороне клиента.

Исходя из фона С#/Java, я понял, что Javascript потребует изменения мышления, однако я по-прежнему хотел применить хорошие принципы OO, если это возможно, в частности, чтобы контролировать вероятную сложность приложения.

После небольшого поиска я нашел замечательную книгу под названием Object Oriented Javascript от Стояна Стефанова. Это действительно открыло мне глаза на силу этого часто называемого "игрушечного языка". Некоторые разделы, посвященные концепциям функционального программирования, переменному охвату и закрытию, могут быть даже немного более продвинутыми, чем вы хотите.

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

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

Ответ 12

Javascript намного, гораздо менее объектно-ориентированный, чем С# или Java; не беспокойтесь, если ваш Javascript не выглядит объектно-ориентированным.