tato část může obsahovat nadměrné množství složitých detailů, které mohou zajímat pouze konkrétní publikum. Prosím, pomozte tím, že vypnete nebo přemístíte jakékoli relevantní informace a odstraníte nadměrné detaily, které mohou být v rozporu s politikou zahrnutí Wikipedie. (Říjen 2020) (Učit se, jak a kdy odstranit tuto šablonu zprávy)

kapitola prochází sedm problémů, které je třeba řešit, aby bylo možné správně navrhnout Lexi, včetně všech omezení, které musí být dodržovány. Každý problém je analyzován do hloubky a jsou navržena řešení., Každé řešení je vysvětleno v plném rozsahu, včetně pseudo-kódu a případně mírně upravené verze techniky modelování objektů.

nakonec je každé řešení spojeno přímo s jedním nebo více designovými vzory. Ukazuje se, jak je řešení přímou implementací tohoto návrhového vzoru.

Na sedm problémy (včetně jejich omezení) a jejich řešení (včetně vzoru(s) odkazuje), jsou následující:

Dokument StructureEdit

dokument je „uspořádání základní grafické prvky“, jako jsou znaky, linky, jiné tvary, atd.,, že „zachytit celkový informační obsah dokumentu“(PP. 35). Struktura dokumentu obsahuje sbírku těchto prvků a každý prvek může být zase podstrukturou jiných prvků.

Problémů a Omezení

  1. Text a grafika by mělo být zacházeno stejným způsobem (to znamená, že grafiky nejsou odvozené instance textu, ani naopak)
  2. implementace by měla léčit složité a jednoduché struktury stejným způsobem. Nemělo by znát rozdíl mezi těmito dvěma.,
  3. specifické deriváty abstraktních prvků by měly mít specializované analytické prvky.

řešení a Vzor

rekurzivní kompozice je hierarchická struktura prvků, která staví „stále složitější prvky z jednodušších“ (PP. 36). Každý uzel ve struktuře zná své vlastní děti a svého rodiče. Pokud má být operace provedena na celé struktuře, každý uzel volá operaci na svých dětech (rekurzivně).

jedná se o implementaci kompozitního vzoru, což je sbírka uzlů., Uzel je abstraktní základní třída, a deriváty mohou být buď listy (singulární), nebo sbírky ostatní uzly (což může obsahovat listy nebo kolekce uzlů). Když je operace provedena na nadřazeném, je tato operace rekurzivně předána hierarchii.

formátování FormattingEdit

se liší od struktury. Formátování je metoda vytváření konkrétní instance fyzické struktury dokumentu. To zahrnuje rozdělení textu na řádky, použití pomlček, nastavení šířky okrajů atd.,

problémy a omezení

  1. rovnováha mezi kvalitou, rychlostí a úložným prostorem
  2. Udržujte formátování nezávislé (odpojené) od struktury dokumentu.

řešení a Vzor

třída Kompozitoru zapouzdří algoritmus používaný k formátování kompozice. Compositor je podtřída primitivního objektu struktury dokumentu. Kompozitor má přidruženou instanci objektu kompozice., Když kompozitor spustí Compose(), iteruje přes každý prvek přidruženého složení a přeskupí strukturu vložením objektů řádků a sloupců podle potřeby.

samotný kompozitor je abstraktní třída, která umožňuje derivátovým třídám používat různé algoritmy formátování (například dvojité rozestupy, širší okraje atd.)

strategický vzor se používá k dosažení tohoto cíle. Strategie je metoda zapouzdření více algoritmů, které mají být použity na základě měnícího se kontextu., V tomto případě by formátování mělo být odlišné v závislosti na tom, zda text, grafika, jednoduché prvky atd., jsou formátovány.

Zdobit Uživatel InterfaceEdit

schopnost měnit grafické rozhraní, které uživatel používá k interakci s dokumentem.,

Problémů a Omezení

  1. Vymezit stránku textu s ohraničením na editační oblasti
  2. posuvníky, které umožní uživateli zobrazit různé části stránky
  3. Uživatelské rozhraní objektů by neměl vědět o zdobení
  4. Vyhnout se „exploze třídy“, která by byla způsobena subclassing pro „všechny možné kombinace zdobení“ a prvky (p. 44)

Řešení a Vzor,

použití transparentní kryt umožňuje prvky, které posilují chování složení, které mají být přidány do složení., Tyto prvky, jako je Border a Scroller, jsou speciální podtřídy samotného singulárního prvku. To umožňuje, aby kompozice byla rozšířena a účinně přidávala prvky podobné stavu. Protože tyto rozšíření jsou součástí struktury, jejich potřeby Operation() bude volána, když struktura je Operation() se nazývá. To znamená, že klient nepotřebuje žádné speciální znalosti nebo rozhraní se strukturou, aby mohl používat zdobení.,

jedná se o vzor dekorátoru, který přidává odpovědnost k objektu bez úpravy samotného objektu.

Podpora více standardů Look-And-Feeledit

Look-and-feel odkazuje na standardy uživatelského rozhraní specifické pro platformu. Tyto standardy „definují pokyny pro to, jak se aplikace objevují a reagují na uživatele“ (s. 47).

Problémů a Omezení

  1. editor musí implementovat standardy různých platformách, tak, že je přenosný,
  2. Snadno přizpůsobit se nové a vznikající standardy
  3. Povolit pro run-time změna podívej-a-cítit (tj.,: No hard-coding)
  4. mají sadu abstraktních elementárních podtříd pro každou kategorii prvků(posuvník, tlačítka, atd.)
  5. mají sadu konkrétních podtříd pro každou abstraktní podtřídy, které mohou mít jiný vzhled a pocit standardu. (Posuvník s MotifScrollBar a PresentationScrollBar pro Motivem a Prezentace vypadat-a-pocit)

Řešení a Vzor,

Od objektu, vytváření různých konkrétních objektů nemůže být provedeno za běhu, objekt, proces tvorby musí být získávána., To se provádí pomocí abstraktní guiFactory, která přebírá odpovědnost za vytváření prvků uživatelského rozhraní. Abstraktní guiFactory má konkrétní implementace, jako je MotifFactory, která vytváří konkrétní prvky vhodného typu (MotifScrollBar). Tímto způsobem musí program požádat pouze o posuvník a za běhu bude mít správný konkrétní prvek.

Jedná se o abstraktní továrnu. Běžná továrna vytváří betonové předměty jednoho typu. Abstraktní továrna vytváří betonové objekty různých typů, v závislosti na konkrétní realizaci samotné továrny., Jeho schopnost soustředit se nejen na konkrétní předměty, ale na celé rodiny betonových předmětů „ji odlišuje od ostatních kreačních vzorů, které zahrnují pouze jeden druh produktového objektu“ (s. 51).

Podpora více okenních Systémůedit

stejně jako look-and-feel se liší napříč platformami, tak je způsob manipulace s windows. Každá platforma zobrazuje, stanoví, zpracovává vstup a výstup z, a vrstvy oken jinak.,

problémy a omezení

  1. editor dokumentů musí běžet na mnoha „důležitých a do značné míry nekompatibilních okenních systémech“, které existují (p. 52)
  2. nelze použít abstraktní továrnu. Vzhledem k rozdílným standardům nebude pro každý typ widgetu společná abstraktní třída.
  3. vytvořit novou, nestandardní okenní systém

Řešení a Vzor,

je možné vytvořit „vlastní abstraktní a konkrétní výrobek třídy“, protože „všechny okenní systémy obecně to samé“ (str. 52)., Každý okenní systém poskytuje operace pro kreslení primitivních tvarů, ikonifikaci / de-iconifying, změnu velikosti a osvěžující obsah okna.

abstraktní základna Window třída může být odvozena od různých typů existujících oken,jako je aplikace, ikonifikovaný dialog. Tyto třídy budou obsahovat operace spojené s windows,jako je přetváření, graficky osvěžující atd. Každé okno obsahuje prvky, jejichž Draw() funkce jsou povoláni do Window‚s vlastní kreslení-souvisejících funkcí.,

aby nebylo nutné vytvářet podtřídy oken specifické pro platformu pro každou možnou platformu, použije se rozhraní. Window třída bude implementovat Window realizace (WindowImp) abstraktní třídy. Tato třída pak bude odvozena do více implementací specifických pro platformu, z nichž každá má operace specifické pro platformu., Tedy, pouze jeden soubor Window třídy jsou potřebné pro každý typ Window, a pouze jednu sadu WindowImp třídy jsou potřebné pro každou platformu (spíše než Kartézský součin všech dostupných typů a platformy). Přidání nového typu okna navíc nevyžaduje žádnou úpravu implementace platformy nebo naopak.

toto je mostový vzor. Window a WindowImp jsou různé, ale související., Window nabídky s okny v programu, a WindowImp nabídky s okny na platformě. Jeden z nich se může změnit, aniž by musel měnit druhý. Mostní vzor umožňuje těmto dvěma „odděleným hierarchiím tříd spolupracovat, i když se vyvíjejí nezávisle“ (s. 54).

Uživatel Operaceeditovat

Všechny akce může uživatel s dokumentem, od vstupu text, měnit formátování, ukončení, ukládání, atd.,

Problémů a Omezení

  1. Operace musí být přístupné prostřednictvím různých vstupů, jako je menu a klávesové zkratky pro stejný příkaz
  2. Každá varianta má rozhraní, které by měly být modifikovatelné
  3. Operace jsou implementovány v několika různých třídách,
  4. aby se zabránilo spojovací, nesmí být mnoho závislostí mezi implementace a uživatelské rozhraní tříd.,
  5. Zpět a znovu příkazy musí být podporován na většině dokumentu, změna operace, bez libovolné omezení na počet úrovní undo
  6. Funkce nejsou životaschopné, protože nemají undo/redo snadno, nejsou snadno spojena s státu, a jsou těžko k prodloužení nebo opětovné použití.nabídky
  7. by měly být považovány za hierarchické kompozitní struktury. Nabídka je tedy položka nabídky, která obsahuje položky nabídky, které mohou obsahovat další položky nabídky atd.,

řešení a Vzor

každá položka nabídky, spíše než instance se seznamem parametrů, se místo toho provádí příkazovým objektem.příkaz

je abstraktní objekt, který má pouze jediný abstrakt Execute() metoda. Odvozené objekty vhodně rozšiřují metodu Execute() (tj.PasteCommand.Execute() by využívaly vyrovnávací paměť schránky obsahu). Tyto objekty mohou být použity widgety nebo tlačítka stejně snadno, jak mohou být použity položky nabídky.,

Na podporu undo a redo, Command je také uveden Unexecute() Reversible(). V derivátových třídách, první obsahuje kód, který vrátí tento příkaz, a druhý vrátí boolean hodnotu, která definuje, zda je příkaz neproveditelný. Reversible() umožňuje, aby některé příkazy byly neproveditelné, například příkaz Uložit.

provedeny Commands jsou uloženy v seznamu s metodou vedení „prezentovat“ značku přímo po poslední provedený příkaz., Požadavek na vrácení bude volat Command.Unexecute() přímo před“ přítomen „a poté přesunout“ přítomen “ zpět jeden příkaz. Naopak, Redo žádost bude volat Command.Execute() po „současnost“, a přesunout „dárek“ vpřed.

tentoCommand přístup je implementací příkazového vzoru. Zapouzdřuje požadavky v objektech a používá společné rozhraní pro přístup k těmto požadavkům. Klient tak může zpracovávat různé požadavky a příkazy mohou být rozptýleny po celé aplikaci.,

Kontrola pravopisu a dělení Slovedit

toto je schopnost editoru dokumentů textově analyzovat obsah dokumentu. Ačkoli existuje mnoho analýz, které mohou být provedeny, Kontrola pravopisu a dělení-formátování jsou zaměření.

Problémů a Omezení

  1. Umožňují více způsobů, jak zkontrolovat pravopis a identifikovat místa pro dělení slov
  2. Umožňují rozšíření pro budoucí analýzu (např. počet slov, kontrola gramatiky)
  3. Být schopen iterovat textového obsahu bez přístupu k textu je skutečná struktura (např.,, array, linked list, string)
  4. umožňují jakýkoli způsob procházení dokumentu(začátek do konce, konec do začátku, abecední pořadí atd.)

řešení a Vzor

odstranění celočíselného indexu ze základního prvku umožňuje implementaci jiného iteračního rozhraní. To bude vyžadovat další metody pro procházení a vyhledávání objektů. Tyto metody jsou uvedeny do abstraktníhoIterator rozhraní., Každý prvek pak implementuje odvození Iterator, v závislosti na tom, jak který prvek udržuje svůj seznam (ArrayIterator LinkListIterator, atd.).

funkce pro procházení a vyhledávání jsou vloženy do abstraktního Iterátorového rozhraní. Budoucí Iterátory mohou být odvozeny na základě typu seznamu budou iterace, například Polí nebo spojových Seznamů. Bez ohledu na to, jaký typ metody indexování používá jakákoli implementace prvku, bude mít příslušný iterátor.

jedná se o implementaci Iterátorového vzoru., Umožňuje klientovi procházet jakoukoli sbírkou objektů, aniž by musel přistupovat k obsahu sbírky přímo, nebo se obávat typu seznamu, který struktura sbírky používá.

nyní, když byl traversal zpracován, je možné analyzovat prvky struktury. Není možné sestavit každý typ analýzy do struktury prvků; každý prvek by musel být kódován a velká část kódu by byla stejná pro podobné prvky.

místo toho je do abstraktní třídy prvku zabudována obecná metoda CheckMe()., Každý iterátor je uveden odkaz na konkrétní algoritmus(jako je kontrola pravopisu, Kontrola gramatiky atd.). Když tento iterátor iteruje prostřednictvím své sbírky, volá každý prvek CheckMe, procházející zadaný algoritmus. CheckMe poté předá odkaz na svůj prvek zpět do uvedeného algoritmu pro analýzu.

Chcete-li tedy provést kontrolu pravopisu, bude iterátoru front-to-end uveden odkaz na objekt SpellCheck., Iterátor by pak přístup k každý prvek, vykonávající jeho CheckMe() metoda SpellCheck parametr. Každý CheckMe by pak zavolal SpellCheck a předal odkaz na příslušný prvek.

tímto způsobem lze použít jakýkoli algoritmus s jakoukoli traverzální metodou, aniž by byl pevný kód spojen s druhým. Například Find lze použít jako “ najít další „nebo“ najít předchozí“, v závislosti na tom, zda byl použit iterátor“ vpřed „nebo“ zpětný “ iterátor.,

kromě toho mohou být algoritmy samy zodpovědné za řešení různých prvků. Například SpellCheck algoritmus by ignorovat Graphic element, spíše než mít na programu každý Graphicodvozený prvek nebude posílat sami na SpellCheck.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *