Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Ez egy AI által fordított bejegyzés.

제이온

[Objektumok] 2. fejezet. Objektumorientált programozás

  • Írás nyelve: Koreai
  • Referencia ország: Minden ország country-flag

Válasszon nyelvet

  • Magyar
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी

A durumis AI által összefoglalt szöveg

  • Bemutatja az objektumorientált programozási megközelítést a filmjegy-foglalási rendszer megvalósításához, bemutatja a együttműködés, az objektumok és az osztályok fogalmát, és hangsúlyozza a domain szerkezetét követő programstruktúrát.
  • Különösen hangsúlyozza az objektumok autonómiáját és a burkolást a külső beavatkozások minimalizálása érdekében, és az interfész és a megvalósítás szétválasztását a programozók szabadságának biztosítása érdekében.
  • Ezenkívül bemutatja a rugalmas és bővíthető kód írásának módját a kedvezményes árak kiszámításához szükséges együttműködés, az öröklődés és a polimorfizmus felhasználásával, hangsúlyozva az absztrakció fontosságát és a kompozíció előnyeit a kód újrafelhasználása érdekében.

Filmjegy-foglalási rendszer


Követelmények áttekintése

  • Online filmjegy-foglalási rendszer létrehozása a cél.
  • A film a film alapvető adatait mutatja be.
    • Cím, lejátszási idő, ár információk stb.
  • A vetítés a film tényleges nézői által való megtekintését mutatja be.
    • Vetítési dátum, idő, sorszám stb.
  • Az emberek filmre foglalnak jegyet, de valójában egy adottvetítésrefoglalnak jegyet.
  • Kedvezmény feltételek
    • Az ár kedvezményének lehetősége
    • Sorszám feltétel: a vetítés sorszámát használja a kedvezmény meghatározásához
    • Időszak feltétel: a film lejátszási kezdetének időpontját használja a kedvezmény meghatározásához
  • Kedvezmény politika
    • Kedvezményes díj meghatározása
    • Összegkedvezmény politika: a foglalási díjból egy meghatározott összeget von le
    • Százalékos kedvezmény politika: az eredeti ár egy meghatározott százalékát vonja le
  • Filmre lehet egyetlen kedvezmény politikát rendelni, vagy egyáltalán nem, a kedvezmény feltételeket viszont több lehetőség kombinálásával is meghatározhatjuk.
  • Ha van kedvezmény politika, de nem teljesülnek a feltételek, vagy nincs kedvezmény politika, akkor a díj nem kerül kedvezményezésre.


Objektum-orientált programozás felé

Együttműködés, objektumok, osztályok

  • Az objektum-orientált programozás az objektumokra irányul.
    • Ne az osztály meghatározása után gondolkozzunk azon, hogy milyen attribútumokra és metódusokra van szükségünk az osztályban.
    • Meg kell határoznunk, hogy mely objektumok milyen állapotokkal és viselkedéssel rendelkeznek.
    • Az objektumokat nem önálló entitásoknak, hanem együttműködő közösség tagjainak kell tekintenünk.


A domain szerkezetét követő programstruktúra

  • A domain a probléma megoldásához szükséges terület, amelyhez a felhasználó a programot használja.

Untitled

  • Általában az osztály neve megegyezik a megfelelő domain fogalom nevével, vagy legalábbis hasonlónak kell lennie.
  • Az osztályok közötti kapcsolatot is a lehető legjobban a domain fogalmak közötti kapcsolathoz kell igazítani, hogy a program struktúrája könnyen érthető és előre látható legyen.


Osztályok megvalósítása

  • Az osztályok belső és külső részből állnak, és egy kiváló osztály megtervezéséhez meg kell határoznunk, hogy mely részt tesszük nyilvánossá, és melyet rejtünk el.
    • Az objektum attribútumait private-ként blokkoljuk, és a belső állapot módosításához szükséges metódusokat public-ként nyitva tartjuk.
  • Az osztály belső és külső részének elkülönítése biztosítja az objektum önállóságát, így a programozónak szabadsága van a megvalósításban.


Önálló objektumok

  • Az objektumoknak önálló objektumoknak kell lenniük, állapotokkal és viselkedéssel.
  • A adatok és a funkciók együttesen történő összekapcsolását a objektumon belül kapszulázásnak nevezzük.
  • A hozzáférési szabályozás segítségével csökkenthető a külső beavatkozás, így az objektum képes önállóan dönteni a viselkedéséről.
  • Az interfész és a megvalósítás szétválasztásának elve a objektum-orientált programozás egyik fő elve.
    • Nyilvános interfész: külsőleg elérhető rész
    • Megvalósítás: belsőleg elérhető rész


A programozó szabadsága

  • A programozók szerepe osztály-íróra és kliens-programozóra oszlik.
    • Az osztály-író új adattípusokat hoz létre.
    • A kliens-programozó használja az osztály-író által létrehozott adattípusokat.
  • Megvalósítás elrejtése
    • Az osztály-író csak a szükséges részeket teszi elérhetővé a kliens-programozó számára, így elrejtheti a belső megvalósítást.
    • A kliens-programozónak csak az interfészt kell ismernie, így csökkenthető a tudás mennyisége.


Együttműködő objektumok közössége

  • A pénz kifejezésekor nem célszerű egyszerűen egy Long típusú változót deklarálni, hanem egy Money objektummal kell beburkolni. Az objektumok használata javítja az értelmezést, és lehetővé teszi a redundáns műveletek végrehajtását egy helyen.
  • A rendszer bizonyos funkcióinak megvalósításához szükséges objektumok közötti kölcsönhatást együttműködésnek nevezzük.


Rövid történet az együttműködésről

  • Az objektumoknak csak üzenetek küldésével vagy fogadásával lehet kölcsönhatásba lépniük egymással.
  • A fogadott üzenet feldolgozásához szükséges saját módszert metódusnak nevezzük.
  • Fontos megkülönböztetni az üzeneteket és a metódusokat, innen indul ki a polimorfizmus fogalma.


Kedvezményes díj lekérdezése

Kedvezményes díj kiszámításához szükséges együttműködés megkezdése

  • A Movie osztály nem tartalmaz részletes logikát a kedvezmény politikáról, hanem átadta azt a DiscountPolicy interfésznek. Az öröklődés, a polimorfizmus és az absztrakció használata elengedhetetlen.


Kedvezmény politika és kedvezmény feltételek

Untitled


Öröklődés és polimorfizmus

Fordítási időbeli függőség és futási időbeli függőség

  • A kód függősége és a futási időbeli függőség eltérhet.
  • Minél nagyobb a különbség a kettő között, annál nehezebb megérteni a kódot, de annál rugalmasabb és bővíthető lesz.


A különbségen alapuló programozás

  • Az öröklődés lehetővé teszi új osztályok gyors és egyszerű hozzáadását egy meglévő osztály alapján, és lehetővé teszi a szülő osztály megvalósításának újrafelhasználását.
  • A szülőosztályhoz képest eltérő részek hozzáadásával új osztályok létrehozásának módját a különbségen alapuló programozásnak nevezzük.


Öröklődés és interfész

  • Az öröklődés révén a szülő osztály által biztosított összes interfészt a gyermek osztály örökli.
  • Az interfész definiálja az objektum által értelmezett üzenetek listáját.
public class Movie {

    public Money calculateMovieFee(Screening screening) {
        return fee.minus(discountPolicy.calculateDiscountAmount(screening));
    }
  • A Movie a calculateDiscountAmount üzenetet küldi a DiscountPolicy-nak. A Movie szempontjából nem számít, hogy melyik osztály példánya válaszol, csak az, hogy a válasz sikeres legyen.
  • Ezért az AmountDiscountPolicy és a PercentDiscountPolicy egyaránt helyettesítheti a DiscountPolicy-t a Movie-val való együttműködésben.
  • Az ilyen gyermekosztályok szülőosztály helyett történő használatát felkonvertálásnak nevezzük. Ez azért van, mert a gyermekosztály automatikusan konvertálódik a felsőbb szintű szülőosztályba.


Polimorfizmus

  • A polimorfizmus azt jelenti, hogy az objektumok képesek eltérően válaszolni ugyanarra az üzenetre az objektum típustól függően.
    • A Movie ugyanazt az üzenetet küldi, de az, hogy melyik metódus kerül ténylegesen végrehajtásra, az üzenet fogadó objektumának osztályától függ.
  • A polimorfizmus a program fordítási időbeli függőségének és futási időbeli függőségének eltérésén alapul.
  • A polimorfizmus a metódus futási időbeli kiválasztását eredményezi, ezért késői kötésnek vagy dinamikus kötésnek nevezzük.


Interfész és polimorfizmus

  • Ha a megvalósítást nem kell megosztani, és csak az interfészt szeretnénk megosztani, akkor az absztrakt osztály helyett interfészt kell használni.


Absztrakció és rugalmasság

Az absztrakció ereje

  • Az absztrakció előnyei
    • Az absztrakciós hierarchia külön tekinthető, lehetővé teszi a követelmények politikájának magas szintű leírását.
    • Rugalmasabb lesz a tervezés.


Rugalmas tervezés

  • Az absztrakció megakadályozza a tervezés konkrét helyzetekhez való kötődését, így rugalmasabb tervezést tesz lehetővé.


Absztrakt osztály és interfész kompromisszum

public abstract class DiscountPolicy {

    private List conditions;

    public DiscountPolicy(DiscountCondition... conditions) {
        this.conditions = Arrays.asList(conditions);
    }

    public Money calculateDiscountAmount(Screening screening) {
        for (DiscountCondition condition : conditions) {
            if (condition.isSatisfiedBy(screening)) {
                return getDiscountAmount(screening);
            }
        }
        return Money.ZERO;
    }

    abstract protected Money getDiscountAmount(Screening screening);
}

public class NoneDiscountPolicy extends DiscountPolicy {

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return Money.ZERO;
    }


  • Jelenleg a NoneDiscountPolicy valójában nem szükséges, mivel a DiscountPolicy calculateDiscountAmount() metódusában 0-t ad vissza, ha nincs kedvezmény feltétel. De a felhasználó számára könnyebben érthetővé teszi a Movie argumentumait, ha van egy None politika, amely nem tartalmaz kedvezményt.
  • Ezért a koncepció szempontjából a NoneDiscountPolicy osztály zavaró lehet, és az alábbi módosítással könnyebben érthetővé válik.


public interface DiscountPolicy {

    Money calculdateDiscountAmount(Screening screening);
}

public abstract class DefaultDiscountPolicy implements DiscountPolicy {

    private List conditions;

    public DefaultDiscountPolicy(DiscountCondition... conditions) {
        this.conditions = Arrays.asList(conditions);
    }

    public Money calculateDiscountAmount(Screening screening) {
        for (DiscountCondition condition : conditions) {
            if (condition.isSatisfiedBy(screening)) {
                return getDiscountAmount(screening);
            }
        }
        return Money.ZERO;
    }

    abstract protected Money getDiscountAmount(Screening screening);
}

public class NoneDiscountPolicy implements DiscountPolicy {

    @Override
    public Money calculateDiscountAmount(Screening screening) {
        return Money.ZERO;
    }
}

public class PercentDiscountPolicy extends DefaultDiscountPolicy {

    private double percent;

    public PercentDiscountPolicy(double percent, DiscountCondition... conditions) {
        super(conditions);
        this.percent = percent;
    }

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return screening.getMovieFee().times(percent);
    }
}

public class AmountDiscountPolicy extends DefaultDiscountPolicy {

    private Money discountAmount;

    public AmountDiscountPolicy(Money discountAmount, DiscountCondition... conditions) {
        super(conditions);
        this.discountAmount = discountAmount;
    }

    @Override
    protected Money getDiscountAmount(Screening screening) {
        return discountAmount;
    }


  • A DiscountPolicy interfész absztrakcióval lett ellátva, és megkülönböztetik a NoneDiscountPolicy és az általános kedvezmény politikát jelölő DefaultDiscountPolicy implementációját.

Untitled

  • A NoneDiscountPolicy számára külön interfész hozzáadása lehet, hogy a megnövekedett összetettséghez képest kevésbé hatékonynak tűnik.
  • Tudnunk kell, hogy minden írt kód kompromisszum eredménye. Vagyis minden írt kódnak meg kell felelnie egy meghatározott célnak.


Kód újrafelhasználása

  • Az öröklődés használható a kód újrafelhasználásához.
  • De a kód újrafelhasználásához az öröklődés helyett inkább a kompozíciót kell használni.
  • A jelenlegi kódban a Movie osztály a DiscountPolicy kódját a kompozíció segítségével használja újrafel.
  • Ha a Movie-t szülőosztálynak tekintjük, és AmountDiscountMovie és PercentDiscountMovie osztályokat hozzunk létre, akkor az öröklődést használtunk volna.


Öröklődés

  • Az öröklődés hátrányai
    • Sérti a kapszulázást.
      • Ismernünk kell a szülőosztály belső struktúráját.
      • A szülőosztály módosítása esetén nagy a valószínűsége annak, hogy a gyermekosztályt is módosítani kell.
    • Rugalmatlanná teszi a tervezést.
      • A szülőosztály és a gyermekosztály közötti kapcsolatot a fordítási időben határozzák meg.
      • A futási időben nem lehetséges az objektum típusa megváltoztatása.
      • De a kompozíció révén a changeDiscountPolicy() metódus segítségével a használó osztály megváltoztathatja az példányt futási időben.


Kompozíció

  • A kód újrafelhasználásának módját, amelyben csak az interfészben definiált üzeneteket használjuk, kompozíciónak nevezzük.
  • Lehetővé teszi a kapszulázást, és laza kapcsolódást tart fenn.
  • A polimorfizmushoz az interfészek újrafelhasználása esetén az öröklődést és a kompozíciót kombinálni kell.
    • Például a DiscountPolicy interfészhez elkerülhetetlen az öröklődés használata az alsóbb szintű implementációk létrehozásához.


Forrás

  • Objektumok
제이온
제이온
제이온
제이온
[Objektumok] 1. fejezet. Objektumok, tervezés A szoftverfejlesztésben a gyakorlati tapasztalat fontosabb, mint az elmélet, és a jó tervezés segít, hogy a kód könnyen érthető legyen és rugalmasan alkalmazkodjon a változásokhoz. Az objektumorientált tervezés olyan módszereket kínál, amelyekkel megfelel

2024. április 28.

[Hatékony Java] 6. pont: Kerülje a felesleges objektum létrehozását Útmutató a Java-ban a felesleges objektum létrehozásának minimalizálásához. A String, Boolean és egyéb immutabilis objektumok esetében célszerű literálokat használni, míg a reguláris kifejezéseknél a Pattern példányokat érdemes gyorsítótárazni. Emellett a

2024. április 28.

[Java] Reflection fogalma és használata A reflexió egy API, amely lehetővé teszi a Java programokban a futásidő alatt a osztályok információinak elérését és a osztályok manipulálását. Futásidőben lehetővé teszi a osztályok létrehozását, a mezők és metódusok elérését, de a kapszulázás megsértésé

2024. április 25.

[Nem informatikai szakember, de fejlesztőként akarok túlélni] 14. Gyakran feltett technikai interjúkérdések összefoglalása kezdő fejlesztők számára Útmutató a kezdő fejlesztők számára a technikai interjúra való felkészüléshez. A fő memóriaterület, adatstruktúrák, RDBMS és NoSQL, eljárási és objektumorientált, átírás és túlterhelés, oldalcserélő algoritmusok, folyamatok és szálak, OSI 7-réteg, TCP és
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024. április 3.

A koreai mozijegyárak valóban drágák? A koreai mozijegyárak drágák? A világ mozijegyárainak összehasonlító elemzésének eredményei szerint Korea olcsóbb az Egyesült Államoknál és az Egyesült Királyságnál, és hasonló szintű Törökországhoz. Különösen a Lotte Cinema L.pay kedvezménye nagy előny l
Maybe a Blog
Maybe a Blog
Maybe a Blog
Maybe a Blog
Maybe a Blog

2024. január 31.

Koncepcionális adatmodellezés A koncepcionális adatmodellezés az entitások elkülönítésének és az entitások közötti kapcsolatok ERD-ként való ábrázolásának folyamata. Az entitások független információs egységek, az attribútumok pedig az entitások által birtokolt adatok. Az azonosítók e
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024. április 8.

A Dolby Cinema tavasza, élethű filmes élmény A Dolby Cinema márciusban öt filmet vetít, köztük a "Nyomorultakat", a "Madame Web"-et és a "Bob Marley: One Love"-ot, Dolby Vision és Dolby Atmos technológiával élénk képet és gazdag hangzást biztosítva.
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요
여행가고싶은블로거지만여행에대해다루진않을수있어요

2024. március 12.

[Javascript] Az objektum szerkezete (V8) A JavaScript objektumok a V8 motorban a gyors módnak megfelelő szerkezetek szövegéhez optimalizálódnak, vagy szótár módként működnek hash-táblaként, a állapottól függően. A gyors mód gyors, de ha új kulcsot adnak hozzá, vagy elemet törölnek, a szótár módb
곽경직
곽경직
곽경직
곽경직
곽경직

2024. március 18.

Mi az adatcímkézés? Típusok, előnyök, hátrányok Az adatcímkézés elengedhetetlen folyamat, amely segít a számítógépeknek megérteni az adatokat, és úgy működik, mint amikor a kutya és a macska képeihez "kutya" és "macska" címkéket adunk hozzá. A címkék hozzáadásával a gépi tanulás lehetséges. A címkézés
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

2024. március 29.