Как классы помогают Вам управлять крупными приложениями?

Вы можете добавить аннотацию типа к вашей переменной arr, и TS будет определять тип разрушенных полей.

См. пример на игровой площадке (примечание noImplicitAny - true в опциях, ошибка для arr0 и отсутствие ошибок для arr1). Вывод типа для теории позади примера.

12
задан 5 revs, 2 users 94% 20 January 2009 в 04:03
поделиться

11 ответов

Теория инкапсуляции обеспечивает одну объективную причину, почему классы лучше, чем наличие никаких классов вообще.

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

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

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

Рассмотрите класс с двумя методами: метод (), который является информацией, скрытой в классе и методе b (), который общедоступен и таким образом доступен непосредственно другими классами.

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

Эта уменьшенная вероятность влияния пульсации является ключевым преимуществом инкапсуляции.

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

Рассмотрите, кроме того, язык только с методами и никакими классами и следовательно никакими средствами методов сокрытия информации друг от друга. Скажем, наша программа имеет 1 000 методов. Каков MPE этой программы?

Теория инкапсуляции говорит нам, что, учитывая систему n общедоступных узлов MPE этой системы является n (n-1). Таким образом MPE наших 1 000 открытых методов 999,000.

Теперь давайте повредим это systém в два класса, каждый имеющий 500 методов. Поскольку у нас теперь есть классы, мы можем принять решение иметь некоторую общественность методов и некоторые частные методы. Это будет иметь место, если каждый метод не будет на самом деле зависеть от любого метода (который маловероятен). Скажем, то, что 50 методов в каждом классе открыты. Что было бы MPE systém быть?

Теория инкапсуляции говорит нам, что это: n ((n/r)-1 + (r-1) p), где r является количеством классов, и p количество открытых методов в классе. Это дало бы нашему systém с двумя классами MPE 499 000. Таким образом максимальная потенциальная стоимость изменения в этом systém с двумя классами уже существенно ниже, чем тот из неинкапсулированных systém.

Скажем, Вы повреждаете свой systém в 3 класса, каждый имеющий 333 класса (хорошо, каждый будет иметь 334), и снова каждый с 50 открытыми методами. Каков MPE? Используя вышеупомянутое уравнение снова, MPE был бы приблизительно 482 000.

Если бы systém повреждается в 4 класса 250 методов каждый, желание MPE было бы 449,000.

Если может казаться, что увеличение числа классов в нашем systém будет всегда уменьшать свой MPE, но это не так. Теория инкапсуляции показывает, что количество классов, в которые systém должен анализироваться для уменьшения MPE: r = sqrt (n/p), который для нашего systém равняется на самом деле 4. systém с 6 классами, например, имел бы MPE 465 666.

2
ответ дан 2 December 2019 в 20:41
поделиться

Я ни в коем случае не фанатик ни к какой парадигме программирования, но я действовал способом OO некоторое время.

Лично, у меня было много 'a-HA!' моменты, что классы непосредственно помогли мне понять домен, в котором я работаю лучше.

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

Короче говоря, инкапсуляция действительно делает меня более счастливым человеком.;)

Надежда, которая помогает.

2
ответ дан 2 December 2019 в 20:41
поделиться

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

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

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

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

Так 1234567890 становится 123-456-7890. К счастью, для нас, телефонные компании также повреждают эти числа вниз тот же путь и присваивают значение блоков. 123 код области, 456 префикс, и 7890 номер строки. Каждый из этих блоков похож на класс, у них всех есть индивидуальная ответственность, форматы и значения.

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

6
ответ дан 2 December 2019 в 20:41
поделиться

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

2
ответ дан 2 December 2019 в 20:41
поделиться

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

Другое экстремальное значение должно использовать набор глобальных переменных и затора вся Ваша логика в public static void main (или Page_Load в ASP.NET) и статические методы вызова, которые называют другие статические методы и так далее... (Я стал головокружительным в конце последнего предложения.)

Единственная вещь, которая повредила бы мое мышление OO, состоит в том, если я работал с чистым функциональным языком, который является чем-то, о чем я не думал начиная с колледжа, к сожалению.

1
ответ дан 2 December 2019 в 20:41
поделиться

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

1
ответ дан 2 December 2019 в 20:41
поделиться

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

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

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

1
ответ дан 2 December 2019 в 20:41
поделиться

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

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

0
ответ дан 2 December 2019 в 20:41
поделиться

Две вещи.

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

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

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

0
ответ дан 2 December 2019 в 20:41
поделиться

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

Я программировал в Visual Basic 3 в течение долгого времени, таким образом, у меня был большой опыт с функциональным программированием, затем приезжая в VB5 и обнаруживая, что объекты были огромным облегчением, потому что я мог связать реальные объекты в свой код, и это помогло много.

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

0
ответ дан 2 December 2019 в 20:41
поделиться

Объективно, как Вы знаете, что использование классов не является причиной приложения, являющегося большим для начала?

Возьмите любую большую программу/приложение, которая не была записана на языке OO (например, C, КОБОЛ, даже плоскость SQL), и необходимо смочь засвидетельствовать, тот размер кода непосредственно не приписывается парадигме языка. Для каждого количества хорошо разработанного, высоко усовершенствованного, допускающего повторное использование C# или компонентов Java, существует также равное количество хорошо разработанного, высоко усовершенствованного, допускающего повторное использование C DLLs. С другой стороны существуют равные количества ужасного, чрезмерно увеличенного в размерах кода.

Точка, хорошие программисты могут совершенствовать свои проектирования системы независимо от языка/платформы.

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

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

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

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

0
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: