Защо ми е необходим за капсулиране на това, което се различава стека преливане на Руски

Капсулиране какви промени. необходимо, тъй като спестява време и усилия, за да се промени това, зависи от това, което може да бъде променено.

Практически пример

Въз основа на факта, че в рамките на променлива капсулирането обикновено се разбира в смисъл на абстракция, за да се скрие от съответната операционна принцип е възможно да се предложи следния пример.

Вие проектирате банкова сметка обект, който сега работи с една и съща база данни. Ако си представим, че обект на внимание може да се управлява с напълно различна база данни (или текстови файлове), а след това, ако просто искате г. за определяне на това в дизайна на интерфейса на обекта, не е нужно да се пренапише кода. който използва обект сметка.

Ако промените по разплащателна сметка, причинени от метода, включително параметрите, съдържащи само сумата и обосновката, потребителското обект ще бъде абсолютно никаква нужда да се знае за какъв вид база данни има достъп до обекта на сметка, за да запазите промените.

Например, тази функция, няма разлика в това, дали използвате това преминава през някаква база данни или файлове - прави всичко различно в сметката е капсулиран:

addToAccount функция ще работи еднакво добре както с инстанция на класа на Сметка. и пример за DatabaseAccount клас:

Уникален дизайн и интерфейс клас профила си можете да произволно промяна на принципите за съхраняването на данни в рамките на сметката без да е необходимо да промените нещо в класната стая, използвайки класа на сметката.

Защо иначе би могло да бъде необходимо?

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

С помощта на капсулиране субект е създаден с известен поведението (външен интерфейс). В същото време цялата необходима информация за "функциониране" на същността, съдържаща се в него също.

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

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

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

Като цяло, идеята за капсулиране се илюстрира добре (и очевидно излезе) концепцията за абстрактни типове данни (можете да прочетете, например, Ахо, Hopcroft, Улман. Структури от данни и алгоритми). Например, има купчина на методи (интерфейс) тласък и поп. В този случай, прилагането на стека може да бъде всичко, но от гледна точка на интерфейс няма разлика. Преди появата на подкрепа за тази концепция на програмни езици, да се реализират капсулиране себе си имал, която налага изисквания за самодисциплина. Но след това, тази концепция е подкрепена от нивото на програмния език конструкции. Тази разлика може да бъде добре се вижда в C и C ++, свързани езици.

Отговорено 7 '16 март в 10:37

Капсулиране на това, което се променя - капсулиране на какво ще се промени
Послепис Капсулират думата не си струва буквално разбира като принципа на ООП.

Един от основните принципи на проектиране приложение, разглеждани много книги на моделите на дизайна, като това е първата програма в моделите на O'Reilly Head First дизайн.

Идеята е, че когато пишете код, за да намерите, че в бъдеще може да бъде усложнен / промяна се дължи на новите изисквания, че тези промени не влияят върху други части на заявлението. Обикновено интерфейси се използват за това, абстрактни класове и методи на шаблона.

Най-простият пример - ако го направите, патици симулатор, не е нужно да кряка () метод се прилага в Duck базовия клас, тъй като гумена патица не е крякат. Разбира се, че може да се каже, че този метод може да се замени на празен кочан за гумени патенца, но може да има други не крякат патици. Идеята е да се предвиди промяна на част от приложението (прилагане на шарлатанин) и го намерите от останалата част на приложението (в книгата е използването на стратегията за образец).

Отговорено 7 '16 март в 22:12

По този начин ще може да се отдели интерфейса на обект от неговото прилагане. Например:

интерфейси износ са широко използвани, например, в Windows в COM технология (Компонент Модел обект), който заменя Оле (Свързване на обекта и вграждане).

Когато се използват заедно, обектите, създадени в рамките на DLL, и използвани в кода на приложението, важно е, че обектът е бил изтрит от паметта на времето - това е, когато вече не е необходимо, и не по-късно, а не преди това. За тази цел справка преброяване функциите на интерфейса.

Библиотеката изнася функция на искането си UUID интерфейс - уникален идентификатор на интерфейса.

Клиентът иска интерфейса, това получавате и призовава функция AddRef () чрез увеличаване на броя справки по един. Когато вече не е необходим интерфейс, клиентът извиква функцията Release (), който намалява броя справки по един. Ако референтният брой става нула, функцията на Release () премахва COM-създадения обект.

Отговорено 8 '16 март в 09:51

Капсулирането е необходимо на първо място, за да се скрият подробностите по изпълнението, че никой не трябва да знае. Помислете например за клас от някаква абстрактна анализатора:

Когато пишете клас, ние сме скрити голямата част от работата в частни практики, оставяйки само една обществена. Защо сме го направили, защото е възможно да се направи всички публични методи? - ако сме направили всички методи публично, нашия клас няма да бъдат защитени от злоупотреби, което лесно може да доведе до грешка.

Sootvetsvteno, използване на капсулиране помага за защита на данните на обекта на възможните грешки, които могат да възникнат с директен достъп до данните.

Отговорено 06 март '16 в 18:04

Всички вие сте прав, просто не отговори на този въпрос. TC чудите защо трябва да се капсулират логика, която е обект на чести промени. - Дмитрий Simushev 06 март '16 в 18:19

За да се намесвам с безстепенна логика е останал същият и съответно поддържа съвместимост с останалата част от кода на приложението. Мисля, че нещо подобно. - С. Pronin на 06 Март '16 в 19:03

Кой и за какво да се скрие? Може би само един жалък опит govnokod при лицензиране на килим Co. помете? От декомпилиране и refkleshen никой да се скрие за дълго време, не мога. И като се крият изпълнението винаги е бил разбран за свеждане до минимум на зависимостите. което се постига чрез малък брой публични методи. а по-късно и подгрупа от тях, което е привеждане в интерфейсите. - Webaib 07 Март '16 в 12:42