Як абстракцыя і інкапсуляцыя адрозніваюцца?

Я рыхтуюся да інтэрв'ю і вырашыў асвяжыць свае канцэпцыі аб'ектна-арыентаванае праграмаванне. Ёсць сотні артыкулаў, даступных, але, здаецца, кожны апісвае іх па-рознаму. Некаторыя кажа

<�Р> Абстрактны з'яўляецца «працэсам вызначэння агульных заканамернасцяў, якія маюць   сістэматычныя варыяцыі; абстракцыя ўяўляе сабой агульны шаблон   і дае сродкі для вызначэння, які варыянт выкарыстоўваць »(Рычард   Габрыэль). </Р>

і дасягаецца з дапамогай абстрактных класаў.

Некаторыя іншых кажа

<�Р> Абстрактны азначае паказаць толькі неабходныя дэталі да кліента   аб'ект </р>

і

Let’s say you have a method "CalculateSalary" in your Employee class, which takes EmployeeId as parameter і returns the salary of the employee for the current month as an integer value. Now if someone wants to use that method. He does not need to care about how Employee object calculates the salary? An only thing he needs to be concern is name of the method, its input parameters і format of resulting member,

I googled again і again і none of the results seem to give me a proper answer. Now, where does encapsulation fit in all these? I searched і found a stack overflow question. Even the answers to that questions were confusing Here, it says

Encapsulation is a strategy used as part of abstraction. Encapsulation refers to the state of objects - objects encapsulate their state і hide it from the outside; outside users of the class interact with it through its methods, but cannot access the classes state directly. So the class abstracts away the implementation details related to its state.

і here another reputed member says,

They are different concepts.

Abstraction is the process of refining away all the unneeded/unimportant attributes of an object і keep only the characteristics best suitable for your domain.

Now I m messed up with the whole concept. I know about abstract class, inheritance, access specifiers і all. I just want to know how should I answer when I am asked about abstraction і/or encapsulation in an interview.

Please don't mark it as a duplicate. I know there are several similar questions. But I want to avoid the confusion among the conflicting explanations. Can anyone suggest a credible link? A link to stackoverflow question is also welcome unless it creates confusion again. :)

<�Моцны> EDIT: Мне патрэбныя адказы, трохі з # арыентаваны

50
Іншая карысная ніткай я знайшоў на гэтым жа тэму з'яўляецца StackOverflow .com/пытанні/761194/& hellip;
дададзена аўтар Hemant Kothiyal, крыніца
Акрамя таго, што пра абстракцыі ў тым сэнсе, што Друкарка клас з'яўляецца абстракцыяй фізічнага друкаркі?
дададзена аўтар Matthew Watson, крыніца
Праблема заключаецца ў тым, што няма ніякіх дакладных азначэнняў для гэтых паняццяў, а самі словы маюць некалькі значэнняў, нават у кантэксце арыентацыі аб'екта. Калі казаць пра тое, што ў адным з інтэрв'ю, я спадзяюся, што будзе дастаткова!
дададзена аўтар Matthew Watson, крыніца
Я спадзяюся, што гэтага артыкула бы даць некалькі дакладнае ўяўленне аб адрозненні гэтых двух .. . :)
дададзена аўтар Curiousity, крыніца
@Aparan ён кажа, што калі вы прадэманструеце веданне таго, што абодва паняцці неадназначныя падчас інтэрв'ю (і даваць якія-небудзь з прыведзеных ніжэй прыкладаў, каб паказаць, чаму), што толькі будзе даказаць, што вы разумееце, што аспект ААП.
дададзена аўтар jszigeti, крыніца
дададзена аўтар TT_, крыніца
@jszigeti: Ну, я спадзяюся, што гэта тое, што я збіраюся рабіць. :)
дададзена аўтар Aparan, крыніца
@MatthewWatson: Калі казаць пра тое, што ў адным з інтэрв'ю, я спадзяюся, што будзе дастаткова! Я не атрымаў цябе.
дададзена аўтар Aparan, крыніца
Я збіраюся пачаць Баунті па гэтым пытанні.
дададзена аўтар Aparan, крыніца
Усе гэтыя адказы заблытаць мяне зноў :(
дададзена аўтар Aparan, крыніца

14 адказы

Encapsulation: hiding data using getters and setters etc.

Abstraction: hiding implementation using abstract classes and interfaces etc.

76
дададзена
<�Б> Кожная функцыя з'яўляецца інкапсуляцыя праверыць гэта таксама праверыць гэта аб <�б>, напрыклад мабільны тэлефон .
дададзена аўтар stom, крыніца
Upvote .. !! Ён не можа атрымаць які-небудзь больш просты.
дададзена аўтар RollerCosta, крыніца
Ты хочаш сказаць, што мы не можам дасягнуць абстракцыі без абстрактнага класа або інтэрфейсу? Гэта, безумоўна, вельмі няправільны адказ.
дададзена аўтар Vikram, крыніца
Колькасць павышаюць галасоў гэта няправільны адказ атрымаў гэта проста дзіўна. Хоць абстрактныя класы не маюць рэалізацыі, іх мэтай не з'яўляецца <�б> Абстрактныя . Іх мэта <�б> Успадкоўванне , які з'яўляецца цалкам іншы прынцып аб'ектна-арыентаванага аналізу і праектавання.
дададзена аўтар displayName, крыніца
сэнсу проста
дададзена аўтар Usman Y, крыніца
<�Р> Абстрактны азначае паказаць толькі неабходныя дэталі кліента аб'екта

Actually that is encapsulation. also see the first part of the wikipedia article in order to not be confused by encapsulation and data hiding. http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)

мець на ўвазе, што проста хаваючы ўсё, што вы навучэнцам 1: 1 за ўласцівасці не Інкапсуляцыя наогул. Інкапсуляцыя ўсё аб абароне інварыянтаў і ўтойванне дэталяў рэалізацыі.

тут добры артыкул пра гэта. http://blog.ploeh.dk/2012/11/27/Encapsulationofproperties/ Таксама зьвярніце ўвагу на артыкулы, спасылкі ў гэтым артыкуле.

класы, ўласцівасці і мадыфікатары доступу інструменты, каб забяспечыць герметызацыю ў C #.

вы інкапсуляцыю для таго, каб паменшыць складанасць.

<�Р> Абстрактны з'яўляецца «працэсам вызначэння агульных заканамернасцяў, якія маюць сістэматычныя варыяцыі, абстракцыя ўяўляе сабой агульную мадэль і забяспечвае сродак для вызначэння, які варыянт выкарыстоўваць». (Рычард Габрыэль) </р>

Так, гэта добрае вызначэнне для абстракцыі.

<�Р> Гэта розныя паняцці.   Абстракцыя працэс рафінавання прэч усе непатрэбныя/неістотныя атрыбуты аб'екта і захаваць толькі характарыстыкі лепш за ўсё падыходзіць для вашага дамена.

Так, яны розныя паняцці. мець на ўвазе, што абстракцыя на самай справе супрацьлегласць зрабіць аб'ект, прыдатны для Вашага дамена ТОЛЬКІ. гэта для таго, каб аб'ект, прыдатны для дамена ў цэлым!

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

Добрымі прыкладамі з'яўляюцца класы, якія прадстаўляюцца рамках .net, напрыклад, спіс або калекцыі. гэта вельмі абстрактныя класы, якія можна выкарыстоўваць практычна ўсюды, і ў многіх галінах. Уявіце сабе, калі .net рэалізаваны толькі клас EmployeeList і CompanyList, якія могуць утрымліваць толькі спіс супрацоўнікаў і кампаній са спецыфічнымі ўласцівасцямі. такія класы будуць бескарысныя у большасці выпадкаў. і што боль было б, калі вам давялося паўторна рэалізаваць ўсю функцыянальнасць для Карлистского, напрыклад. Такім чынам, «Спіс» абстрагуюцца ад Супрацоўніка, кампаній і аўтамабіляў. Спіс сам па сабе з'яўляецца абстрактным паняццем, якое можа быць рэалізавана з дапамогай свайго класа.

Інтэрфейсы, абстрактныя класы або атрыманне ў спадчыну і палімарфізм з'яўляюцца інструментамі, каб забяспечыць абстракцыі ў C #.

вы абстракцыя для таго, каб забяспечыць магчымасць шматразовага выкарыстання.

39
дададзена
Я бачу .. ёсць розныя значэння за абстракцыямі. Вікіпедыя таксама адрозніваецца ад «абстракцыі» і «прынцып абстракцыі». Прытрымвайцеся таго, што Мэцью Уотсан сказаў вам у каментарах «Праблема заключаецца ў тым, што няма ніякіх дакладных азначэнняў гэтых паняццяў, і самі словы маюць некалькі значэнняў нават у кантэксце арыентацыі аб'екта.» Да таго часу, як вы можаце даць ім адзін ці больш значэнняў у інтэрв'ю ўсё будзе добра :)
дададзена аўтар Egi, крыніца
stackoverflow.com/a/8960961/2401223 Гэта кажа Інкапсуляцыя стратэгія выкарыстоўваецца як частка абстракцыі </код >
дададзена аўтар Aparan, крыніца
Дзякуй. Я м будзе прытрымлівацца гэтай радзе :)
дададзена аўтар Aparan, крыніца

Abstraction & Encapsulation Example Image source

Abstraction: is outlined by the top left and top right images of the cat. The surgeon and the old lady designed (or visualized) the animal differently. In the same way, you would put different features in the Cat class, depending upon the need of the application. Every cat has a liver, bladder, heart and lung, but if you need your cat to 'purr' only, you will abstract your application's cat to the design on top-left rather than the top-right.

Encapsulation: is outlined by the cat standing on the table. That's what everyone outside the cat should see the cat as. They need not worry whether the actual implementation of the cat is the top-left one or the top-right one or even a combination of both.


PS: Go here on this same question to hear the complete story.

33
дададзена

Я паспрабую паказаць Інкапсуляцыя і абстракцыі просты спосаб .. Давайце паглядзім ..

    <�Літый> Абгортка з дадзеных і функцый у адзінае цэлае (так званы клас) вядомы як інкапсуляцыя. Інкапсуляцыя і утойванне, які змяшчае інфармацыя аб аб'екце, напрыклад, ўнутраныя структуры дадзеных і код.

інкапсуляцыя -

  • Утойванне Складанасць,
  • Прывязка дадзеных і функцыі разам,
  • Making складаны метад прыватнай,
  • робіць зменную асобніка прыватнай,
  • Утойванне непатрэбных дадзеных і функцый ад канчатковага карыстальніка.

Інкапсуляцыя рэалізуе абстракцыю.

І Абстракцыя ёсць -

  • Адлюстраванне Што неабходна,
  • Дадзеныя неабходна абстрагавацца ад канчатковага карыстальніка,

Дазваляе ўбачыць прыкладны

Ніжэй малюнак паказвае графічны інтэрфейс «Кліент дэталі неабходна ADD-й выд ў базу дадзеных».

Customer Screen GUI

Гледзячы на ​​малюнкі, мы можам сказаць, што нам патрэбен клас кліентаў.

<�Моцны> Крок - 1: Што робіць мае патрэбы класа Customer ?

гэта значыць

      
  • 2 зменныя для захоўвання кода кліента і імя кліента.

  •   
  • 1 Функцыя дадання кода кліента і імя кліента ў базе дадзеных.

  •   
  namespace CustomerContent
    {
       public class Customer
       {
           public string CustomerCode = "";
           public string CustomerName = "";
           public void ADD()
           {
              //my DB code will go here
           }

Цяпер толькі ADD метад не будзе працаваць тут у адзіночку.

<�Моцны> Крок -2: Як праца праверка, ADD Функцыя акт

Нам спатрэбяцца базы дадзеных кода падлучэння і валідацыю кода (Дадатковыя метады).

     public bool Validate()
     {
    //Granular Customer Code and Name
    return true;
     }

     public bool CreateDBObject()
     {
    //DB Connection Code
    return true;
     }


class Program
{
   static void main(String[] args)
   {
     CustomerComponent.Customer obj = new CustomerComponent.Customer;

     obj.CustomerCode = "s001";
     obj.CustomerName = "Mac";

     obj.Validate();
     obj.CreateDBObject();

     obj.ADD();
    }
}

Зараз няма неабходнасці паказваць дадатковыя метады, ( Validate() CreateDBObject() [Складанае і экстра метад]) карыстачу End User.End трэба толькі, каб убачыць і ведаць аб кодэксе кліента, імя кліента і кнопку, якая будзе дадаць запіс ADD .. Канчатковы карыстальнік не клапоціцца пра тое, як будзе дадаваць дадзеныя ў базу дадзеных?.

<�Моцны> Крок -3 :. Прыватны дадатковыя і складаныя метады, якія не ўключае ў сябе ўзаемадзеянне Канечнага карыстальніка

Так што робіць ўскладненых і Extra метад як Private замест Public (г.зн. утойванне гэтых метадаў) і выдаленне obj.Validate (); obj.CreateDBObject (); з асноўных у класе праграма мы дасягаем Encapsulation.

Іншымі словамі Спрашчэнне інтэрфейсу для кліента Encapsulation.

<�Моцны> Так што зараз поўны код выглядае, як паказана ніжэй -

 namespace CustomerContent
 {
     public class Customer
     {
        public string CustomerCode = "";
        public string CustomerName = "";

        public void ADD()
        {
           //my DB code will go here
        }

        private bool Validate()
        {
           //Granular Customer Code and Name
           return true;
        }

        private bool CreateDBObject()
        {
           //DB Connection Code
           return true;
        }


  class Program
  {
     static void main(String[] args)
     {
        CustomerComponent.Customer obj = new CustomerComponent.Customer;

        obj.CustomerCode = "s001";

        obj.CustomerName = "Mac";

        obj.ADD();
   }
}

Кароткае апісанне:

Step -1: What does my Customer Class needs? is Abstraction.

Step -3: Step -3: Private the extra and complicated methods which doesn't involves End User's Interaction is Encapsulation.

P.S. - The code above is hard and fast.

UPDATE: There is an video on this link to explain the sample: What is the difference between Abstraction and Encapsulation

19
дададзена
як цяпер будзе Validate() і CreateDBObject() выклікаецца?
дададзена аўтар varsha, крыніца
<�Код> ADD грамадскага несапраўднымі() {Validate (); CreateDBObject (); }
дададзена аўтар Vikram, крыніца
Як бы вы назвалі Validate() і CreateDBObject() тады ... Я згодны @varsha.
дададзена аўтар Krish, крыніца

Я думаю, што яны трохі розныя паняцці, але часта яны ўжываюцца разам. Інкапсуляцыя з'яўляецца спосабам ўтойвання дэталяў рэалізацыі ад выклікае абанента, у той час як абстракцыі больш філасофія дызайну з удзелам стварэння аб'ектаў, якія аналагічныя знаёмымі аб'ектамі/працэсы, каб дапамагчы разуменню. Інкапсуляцыя з'яўляецца толькі адзін з многіх метадаў, якія могуць быць выкарыстаны для стварэння абстракцыі.

Возьмем, напрыклад, «вокны». Яны не з'яўляюцца сапраўды акном у традыцыйным сэнсе гэтага слова, яны проста графічныя квадраты на экране. Але гэта карысна думаць пра іх, як вокны. Гэта абстракцыя.

Калі «вокны API» хавае падрабязнасці таго, як тэкст ці графіка фізічна аказваецца ў межах вокны, гэта інкапсуляцыя.

8
дададзена
дзякуй за спасылку
дададзена аўтар Aparan, крыніца
Ці можаце вы даць крыніца для рэзервовага вашай канцэпцыі?
дададзена аўтар Aparan, крыніца

Аб'ектна-арыентаваны аналіз і праектаванне (OOAD) фактычна грунтуецца на чатырох прынцыпах. Яны:

  • Abstraction: means that you only incorporate those features of an entity which are required in your design. So, if every bank account has an opening date but your application doesn't need to know an account's opening date, then you simply don't add the OpeningDate field in your Object-Oriented Design of the BankAccount class. Abstraction in OOAD has nothing to do with abstract classes in programming. By this principle, your entities are an abstraction of what they actually are. You design an abstraction of Bank Account down to only that level of detail that your application's needs.

  • Inheritance: is the principle that saves you from writing those functionalities that you can receive from someone else. Just like you may inherit your parents' wealth, you may inherit fields and methods from your parent class. So, taking everything that parent class has and then adding something more if need be, is inheritance. Don't go looking for inheritance in your Object Oriented Design. Inheritance will present itself.

  • Polymorphism: is a consequence of inheritance. Inheriting a method from parent is useful, but being able to modify a method if the situation demands, is polymorphism. You may implement a method in the subclass with exactly the same signature as in parent class so that when called, the method from child class is executed. This is polymorphism.

  • Encapsulation: means bundling the related functionality together and giving access to only the needful. This principle is the basis of designing classes in Object Oriented Design where:

    • you put related data and methods together; and,
    • not all the pieces of data and methods may be public.

Людзі, якія сцвярджаюць, што <�моцны> "Абстракцыя вынікаў OOAD ў абстрактным ключавога слова ЛСГ" ... </моцны > Ну гэта проста ня правільна .

Прыклад: Калі вы праектуеце універсітэт у дадатку з выкарыстаннем аб'ектна-арыентаваных прынцыпаў, вы толькі дызайн «абстракцыя» універсітэта. Нават нягледзячы на ​​тое, як правіла, адзін выдачу наяўных грошай банкамата амаль у кожным універсітэце, вы не можаце ўключыць гэты факт, калі гэта не патрабуецца для вашага прыкладання. І цяпер, хоць вы праектавалі толькі абстракцыю універсітэта, вы не абавязаныя ставіць абстрактны ў аб'яве класа. Ваш абстрактны дызайн універсітэта будзе нармальны клас у вашым дадатку.

3
дададзена

мой 2с

мэта інкапсуляцыі, каб схаваць дэталі рэалізацыі ад карыстальніка вашага класа, напрыклад, калі вы ўнутрана трымаць зЬй :: спіс элементаў у сваім класе, а затым вырашыць, што станд :: вектар будзе больш эфектыўным, вы можаце змяніць гэта без карыстальніка клопату. Тым не менш, як вы ўзаемадзейнічаеце з або СТЛ кантэйнер з дзякуючы абстракцыі, як спіс і вектар можа, напрыклад, быць пройдзены такім жа чынам, выкарыстоўваючы падобныя метады (итераторы).

2
дададзена
пры ўсёй павазе, я буду прытрымлівацца майго тлумачэння :) г.зн. encapsuling хаваючыся ад карыстальніка, абстракцыі больш агульнай канцэпцыі, як інтэрфейс, які падзяляюць некалькі класаў.
дададзена аўтар Anders K., крыніца
Не, я не маю сувязі, гэта, як я зразумеў з розных кніг, як поўны код.
дададзена аўтар Anders K., крыніца
c-sharpcorner.com/UploadFile/tusharkantagarwal/… здаецца, на месцы
дададзена аўтар Anders K., крыніца
што з гэтай нагоды: stackoverflow.com/a/8961003/2401223
дададзена аўтар Aparan, крыніца
Хм .. Гэта тое, што я сказаў у самым маё пытанне. Кожны чалавек мае свае ўласныя канцэпцыі на гэтую тэму :). Ці можаце вы даць пераканаўчую сувязь, каб падтрымаць ваша тлумачэнне?
дададзена аўтар Aparan, крыніца
дададзена аўтар Aparan, крыніца
c-sharpcorner.com/UploadFile/tusharkantagarwal/… плз праверыць гэтыя дзве спасылкі і скажыце мне, што прымаць
дададзена аўтар Aparan, крыніца
Але ён кажа, Абстракцыя з'яўляецца магчымасць абагульняць аб'екта як тып дадзеных, які мае пэўны набор характарыстык і здольны выконваць мноства дзеянняў. Аб'ектна-арыентаваныя мовы праграмавання забяспечваюць абстракцыю з дапамогай класаў . Я не думаю, што абстракцыя проста.
дададзена аўтар Aparan, крыніца

Адным з прыкладаў заўсёды быў даведзены да мяне ў кантэксце абстракцыі; аўтаматычныя у параўнанні з механічнай каробкай перадач на аўтамабілях. Механічная скрынка перадач хаваюць некаторыя выпрацоўкі пераключэння перадач, але вам усё роўна прыйдзецца хапацца і перакласці ў якасці кіроўцы. Аўтаматычная скрынка перадач Інкапсулюйце ўсе дэталі пераключэння перадач, то ёсць хавае ад вас, і, такім чынам, з'яўляецца больш высокай абстракцыяй працэсу пераключэння перадач.

2
дададзена
Я бачу вашу кропку. Як я бачу гэта, хоць, абстракцыя і інкапсуляцыя звязаныя. Калі ў вас няма якой-небудзь інкапсуляцыі ў вас няма якой-небудзь абстракцыі. Праз інкапсуляцыю вы можаце знайсці больш абстрактныя паняцці, так што аўтаматычная скрынка перадач лепш абстракцыі, чым механічнай каробкай перадач. Можа быць, вам не трэба нават канцэпцыя перадачы, магчыма, вам трэба толькі канцэпцыя аўтамабіля рухацца наперад, што б інкапсуляваць усе ўнутраныя механізмы аўтамабіля.
дададзена аўтар Lorentz Vedeler, крыніца
«Аўтаматычная скрынка перадач Інкапсулюйце ўсе дэталі пераключэння перадач, то ёсць хавае ад вас» ... на самай справе, таму я хацеў бы сказаць, што аўтаматычны супраць механічнай скрынкі перадач на аўтамабілях з'яўляецца добрым прыкладам для укупорочные! а не абстракцыі. аўтаматычная скрынка перадач не з'яўляецца абстракцыяй механічнай каробкай перадач, гэта яшчэ адно паняцце. абстракцыя калі б вы сказаць, што аўтамабіль мае патрэбу ў сістэме перадачы электраэнергіі, ігнаруючы як фактычны інтэрфейс для кіроўцы будзе (аўтаматычны або ручной).
дададзена аўтар Egi, крыніца
абедзве крайнасці б ўтрыманне кашмар вядома; D
дададзена аўтар Egi, крыніца
Я абсалютна згодны з апошнім сцвярджэннем. Вы можаце абстрактныя ўсё прэч, пакуль ніхто не мае ўяўлення пра тое, што гэта на самой справе аб больш. але я не згодны з першым сцвярджэннем. Вы можаце практыкаваць герметызацыю без абстракцыі, напрыклад, зрабіўшы праграму толькі адзін вялікі клас, які апрацоўвае ўсе і хавае ўсе дэталі рэалізацыі ад кліента. і абстракцыя без інкапсуляцыі таксама магчыма, робячы праграму з класаў, якія з'яўляюцца невялікімі і маюць адзіную адказнасць пакуль не хаваюць якія-небудзь дэталяў рэалізацыі або любое недапушчальнае стан.
дададзена аўтар Egi, крыніца

Інкапсуляцыя: Утойванне дэталяў рэалізацыі (Заўвага: дадзеныя і/або метады) такія, што толькі тое, што разумна для чытання/запіс/прыдатнай да ўжывання шляхам внешнеположенности даступная ім, усё астатняе «недатыкальны» напрамую.

Абстракцыі: Гэта часам ставіцца канкрэтна да тыпу, які не можа быць апрацаваны, і які забяспечвае шаблон для іншых тыпаў, якія могуць быць, як правіла, з дапамогай падкласаў. У больш агульным сэнсе «абстракцыя» ставіцца да стварэння/мець нешта, што з'яўляецца менш дэталізаваным, менш спецыфічная, менш крупчастым.

Існуе некаторы падабенства, перакрыцце паміж паняццямі, але лепшым спосабам запомніць гэта так: Інкапсуляцыя больш пра хаваючыся дэталі, у той час як абстракцыя больш пра <�ет> абагульняючага дэталі ,

1
дададзена

Абстракцыя і інкапсуляцыя з'яўляюцца заблытанымі тэрмінамі і залежаць адзін ад аднаго. Давайце возьмем гэта на прыкладзе:

public class Person
    {
        private int Id { get; set; }
        private string Name { get; set; }
        private string CustomName()
        {
            return "Name:- " + Name + " and Id is:- " + Id;
        }
    }

Калі вы стварылі клас Person, вы зрабілі герметызацыю шляхам запісы уласцівасцяў і функцый разам (Id, Name, CustomName). Вы выконваеце абстракцыю, калі вы выкрыць гэты клас для кліента,

Person p = new Person();
p.CustomName();

Ваш кліент нічога не ведаю пра Id і імя ў гэтай функцыі не ведае. Цяпер, калі ваш кліент хоча ведаць прозвішча, а не парушаючы пры выкліку функцыі. Вы робіце інкапсуляцыю, дадаўшы яшчэ адну ўласцівасць у класе Person, як гэта.

public class Person
        {
            private int Id { get; set; }
            private string Name { get; set; }
            private string LastName {get; set;}
            public string CustomName()
            {
                return "Name:- " + Name + " and Id is:- " + Id + "last name:- " + LastName;
            }
        }

Паглядзіце, нават пасля таго, як addding дадатковае ўласцівасць у класе, ваш кліент не ведае, што вы зрабілі свой код. Гэта дзе вы зрабілі абстракцыю.

1
дададзена

Як я knowit, інкапсуляцыя утойванне дадзеных класаў самі па сабе, і толькі робіць яго даступным праз сетары/здабытчыкамі, калі яны павінны быць даступныя з навакольнага свету.

Абстракцыя з'яўляецца дызайнам класа для сябе.

Значыць, як Вы ствараеце свой клас дрэва, метады з'яўляюцца агульнымі, якія ўспадкоўваюцца, якія могуць быць пераадолены, якія атрыбуты толькі на прыватным узроўні, або на абароненым, як вы стварыць сваё спадчыну класаў дрэва, карыстаецеся Ці Вы канчатковыя класы, Abtract класы, інтэрфейс-рэалізацыя.

Абстракцыя больш змяшчае фазу оо-дызайн, а таксама інкапсуляцыя зарэгіструе ў developmnent-фазу.

0
дададзена

абстракцыя

In Java, абстракцыя means hiding the information to the real world. It establishes the contract between the party to tell about “what should we do to make use of the service”.

Напрыклад, у распрацоўцы API, толькі абстрактная інфармацыя аб службе была паказана свеце, а фактычная рэалізацыю. Інтэрфейс ў Java можа дапамагчы ў дасягненні гэтай канцэпцыі вельмі добра.

Interface provides contract between the parties, example, producer and consumer. Producer produces the goods without letting know the consumer how the product is being made. But, through interface, Producer let all consumer know what product can buy. With the help of абстракцыя, producer can markets the product to their consumers.

інкапсуляцыя:

Encapsulation is one level down of абстракцыя. Same product company try shielding information from each other production group. Example, if a company produce wine and chocolate, encapsulation helps shielding information how each product Is being made from each other.

  1. Калі ў мяне ёсць індывідуальны пакет адзін для віна і яшчэ адзін для шакалад, і калі ўсе класы абвешчаныя ў пакеце, Мадыфікатар доступу па змаўчанні, мы даем пакет ўзровень інкапсуляцыі для ўсіх класаў.
  2. У пакеце, калі мы аб'яўляем кожны клас падаў (член поля), як прыватных і які мае адкрыты метад доступу да гэтых поля, такім чынам, даючы ўзровень класа інкапсуляцыю гэтых палёў
0
дададзена

Я думаю пра гэта такім чынам, інкапсуляцыі хаваецца шляхам нешта будзе зроблена. Гэта можа быць адзін або некалькі дзеянняў.

Абстракцыя звязаная з «чаму» я герметызавальным гэта першым месцам.

Я ў асноўным кажу кліенту «Вам не трэба шмат ведаць пра тое, як я апрацоўваць кампенсацыю і разлічыць дастаўку і г.д. Я проста хачу, каб ты сказаў мне, што вы хочаце" заказ ", і я буду клапаціцца пра дэталі для вас «.

Такім чынам, я інкапсуляваць дэталі, абагульняючы (абстрагавання) у запыт Checkout.

Я сапраўды думаю, што абстрагаванне і інкапсуляцыя ідуць разам.

0
дададзена

Encapsulate hides variables or some implementation that may be changed so often in a class to prevent outsiders access it directly. They must access it via getter and setter methods.

Abstraction is used to showing what is relevant but in a higher degree(class, interface). Clients use an abstract class(or interface) do not care about who or which it was, they just need to know what it can do.

0
дададзена