GNU/Linux >> Znalost Linux >  >> Linux

Jak na to:Objektově orientované programování – více s třídami a objekty

Bonusové kolo

Vítejte zpět v našem Úvodu do objektově orientovaného programování! Možná by bylo vhodnější říci:„Vítejte v bonusovém kole našeho Úvodu do objektově orientovaného programování!“. Tento článek a ten, který po něm následuje, jsou pro ty z vás, kteří se chtějí dozvědět něco více o některých základech Object Orientation a kteří mají rádi nějaký bonusový obsah!

Pro kontrolu, pokud jste sledovali některé z prvních pěti článků této série, pak jste se naučili docela dost věcí:

  • Jak abstrakce pomáhá zjednodušit programovací úlohy.
  • Základy tříd, metod a vlastností objektové orientace.
  • Základy práce s proměnnými a typy a manipulace s těmito daty.
  • Jak se vypořádat s řízením toku pomocí for a while smyčky.
  • Jak toto vše skloubit a vytvořit jednoduchý program.

Tento a následující článek vezmou to, co jste se z tohoto úvodu naučili, a ukážou vám více o tom, jak můžete využít některé principy objektové orientace (často zkráceně OO) k vytvoření efektivního a dobře organizovaného kódu. Začneme s novým programem, který nám umožní přezkoumat některé základní koncepty a vést k některým novým konceptům, jako jsou konstruktoři a dědictví .

Opět budeme programovat v C# pomocí Microsoft Visual Studio. Pokud byste to chtěli sledovat (a ještě jste tak neučinili), najdete nastavení přímo zde.

Pokud budete postupovat podle nastavení v tomto článku až do sekce „Pod pokličkou“, budete přesně tam, kde začínáme. Jediná věc, kterou udělám jinak než v tomto článku, je, že nebudu používat výchozí název projektu „ConsoleApplication1“. Místo toho nazvu svůj projekt „PettingZoo“ (jedním slovem), protože jako náš vzorový program postavíme domácí zoo.

Poznámka:Orientace objektu je dostupná v mnoha jazycích a platformách a koncepty jsou velmi podobné. Vybral jsem si C#, protože je snadné začít a všechny potřebné zdroje jsou zdarma. Možná máte další jazyky a platformy, které chcete používat, a to je také v pořádku. Jsme tu, abychom se naučili objektovou orientaci, nikoli konkrétní jazyk nebo implementaci.

.

Počáteční nastavení

Než začneme, ověřte, že máte konzolovou aplikaci vytvořenou v sadě Visual Studio. Mělo by to vypadat jako na obrázku 1.

Obrázek 1:Počáteční nastavení programu PettingZoo

S touto konzolovou aplikací dostupnou ve Visual Studiu můžeme začít vytvářet naši první třídu. V C# existuje několik způsobů, jak vytvořit třídu. V některých jazycích, jako je Java, potřebujete vytvářet třídy specifickým způsobem pomocí specifických vzorů jmen souborů a složek, ale C# se stará o to, abychom říkali, že něco je třída.

Všimněte si, že i ve výchozí konzolové aplikaci již máte jednu třídu s názvem Program . Pomocí klíčového slova class následovaný názvem třídy je způsob, jakým definujete třídu v C#.

Pro náš přístup vytvoříme nový soubor s kódem pro naše třídy. Klikněte pravým tlačítkem na uzel PettingZoo v podokně Průzkumník řešení a poté klikněte na Přidat->Třída, jak je znázorněno na obrázku 2.

Obrázek 2:Přidání třídy pomocí Průzkumníka řešení

V dialogovém okně, které se otevře, najděte prvek Kód buď vyhledáním nebo navigací, a nazvěte soubor třídy něco jako Animals.cs, jak je znázorněno na obrázku 3.

Obrázek 3:Dialogové okno Přidání souboru třídy

Nyní byste měli získat nový soubor třídy vytvořený sadou Visual Studio, který obsahuje něco takového:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PettingZoo
{
    class Animals
    {
    }
}

Všimněte si, že ve výchozím nastavení Visual Studio vytvoří soubor třídy i definici třídy na základě zvoleného názvu souboru. V některých jazycích – jako je Java – je tato struktura požadavkem, ale v C# není tak přísná. Za chvíli změníme název třídy, ale zatím to necháme.

V právě vytvořeném souboru Visual Studio si všimnete řady using příkazy a také namespace blok kódu. Tyto řádky nejsou pro naši třídu důležité, ale – v případě, že jste zvědaví – jmenný prostor v C# je způsob, jak organizovat jména ve vašem projektu. Můžete mít více tříd se stejným názvem, například organizovaných pod různými jmennými prostory.

Dokud pracujete v rámci jednoho jmenného prostoru, je adresování tříd poměrně jednoduché. Pokud však potřebujete uspořádat svůj projekt do složitějších divizí, možná budete muset použít různé jmenné prostory, v takovém případě using příkazy vám umožňují vytvářet zástupce těchto jmenných prostorů.

.

Třídy a objekty

Soubor, který nyní máte, obsahuje předpřipravenou třídu s názvem podle zvoleného názvu souboru. Nebudeme mít Animals třídy, tak to změňme na něco jiného. V domácí zoo samozřejmě potřebujeme psy, takže změňte název třídy z Animals na Dog :

class Dog
{
}

Všimněte si změny od Animals (množné číslo) na Dog (jednotné číslo). Později vytvoříme další třídu s názvem Animal , takže při čtení kódu buďte opatrní, abyste zachytili podobné nuance.

Než začneme přidávat jakýkoli obsah do třídy, prozkoumejme rozdíl mezi třídami a objekty. Pamatujte, že třída je šablona pro to, jak by měly být objekty. Zjednodušená a nepříliš přesná analogie je analogie receptu a dortu.

(Tato sekce je přehled tříd a objektů upravený z vysvětlení uvedeného v odkazovaném článku výše. Pokud chcete toto opakování přeskočit a přejít rovnou k programování, přejděte rovnou na další sekci! Jinak si vychutnejte koláč!)

Recept vám řekne, jak udělat dort, a je tedy – v OO termínech – třída . Dort je výsledkem provádění receptu a – opět řečeno OO – je objekt . Dalším často používaným termínem je instance , což znamená, že dort je instancí provedení receptu.

Stejně jako u koláčů a receptů je každý koláč jedinečný koláč. To, co uděláte s jedním dortem, neovlivní žádné další dorty. Umístění polevy na jeden cupcake neznamená, že všechny cupcaky mají nyní polevu. Podobně, když sníte jeden košíček, všechny ostatní vám stále zbývají.

Mít recept a vědět, že se vyrábí dort, však nestačí. Potřebujete také kuchyň, ve které budete koláč péct. Z hlediska OO jde o program, ve kterém vytvoříte objekt, a v našem případě by to byl hlavní soubor Program.cs.

.

Zpět do PettingZoo

Použijme naši novou třídu k vytvoření Dog otevřete soubor Program.cs a přidejte následující řádek do static void main blok kódu:

Dog myDog = new Dog();

Tento řádek vytvoří nového Dog objekt od Dog třídy a uložte jej do myDog variabilní. Dovolte mi rozdělit tento řádek na tři části, abych mohl vysvětlit, co se děje.

[1]Dog [2]myDog = [3]new Dog();

První prvek [1], Dog , je typ proměnné, kterou chceme vytvořit. Ve staticky typovaných jazycích, jako je C# a Java, musíme deklarovat, jaký typ proměnné je, než jí můžeme přiřadit hodnoty. Jazyky, které jsou dynamicky zadávány, jako JavaScript nebo Perl, to nevyžadují a odpovědnost za sledování toho, jaký typ dat proměnná obsahuje, přenáší na vývojáře.

Druhý prvek [2], myPes , je název proměnné, kterou používáme pro přístup k objektu. Není to nutně jméno psa, kterého vytvoříme, ale spíše to, co používáme k odkazování na tento konkrétní případ Dog třída.

Poznámka:Další informace o proměnných a datových typech, jako je řetězec, najdete v našem úvodu k programování v článku o proměnných a typech.

.
Nakonec, třetí prvek [3], new Dog() , nám říká, že chceme vytvořit – nebo instanciovat –nový objekt založený na Dog třída. Všimněte si, že za názvem třídy jsou závorky, což znamená, že se ve skutečnosti jedná o metodu . Vrátíme se k této metodě, což je speciální metoda zvaná konstruktor (Konstruktorům se budeme věnovat hlouběji v následujícím článku, na který odkazujeme níže).

S naším programem nyní vytváříme nový objekt z Dog třídu, kterou ukládá do myDog proměnné, můžeme začít přistupovat k vlastnostem a metodě našeho objektu. Samozřejmě kromě toho, že naše třída je úplně prázdná a bez obsahu! Pojďme to napravit.
.

Vlastnosti a metody

Vraťme se k našemu souboru Animals.cs, kde je náš Dog třída má jméno, ale nic jiného. Vše, co vložíme do tohoto bloku kódu, se však stane součástí definice třídy. Pamatujte, že třídy mají vlastnosti a metody, které definují, co je objekt a co může dělat.

Vytvořme vlastnost i metodu a pak probereme, co každá dělá. Uvnitř složených závorek bloku kódu {} , přidejte následující dva řádky:

string Name;
void Speak() { Console.WriteLine("Woof"); }

První řádek (string Name; ) je vlastnictví nebo pole . V objektové orientaci vlastnosti definují, co něco je. V našem případě chceme, aby měl náš pes jméno, takže jsme vytvořili vlastnost string, která bude obsahovat jméno psa.

Pamatujte, že objektová orientace se snaží vytvořit programové reprezentace skutečných objektů. Samozřejmě, že jméno samo o sobě nedělá psa, ale OO se nesnaží duplikovat všechny vlastnosti každého objektu, jen ty, které potřebujeme. Další vlastnosti přidáme později.

Druhý řádek je metoda definice (nebo podpis metody ) a je o něco složitější, takže stejně jako předtím mi to dovolte trochu rozebrat a ukázat vám, co jednotlivé prvky dělají.

[1]void [2]Speak() [3]{ Console.WriteLine("Woof"); }

Prvek [1], void , je návrat typ metody nebo typ výstupu, který metoda poskytne, když je spuštěna. Ve staticky typovaných jazycích jako C# a Java musíme kromě deklarování typů proměnných vždy deklarovat, jaký typ dat vracíme z metod. Dynamicky typované jazyky ponechávají odpovědnost za určení toho, co z metody vzejde, na vývojáře.

V našem případě, alespoň zpočátku, chceme, aby pes řekl „Fuj“, když ho požádáme, aby promluvil, takže nemusíme nic vracet. To se změní později, až se v dalším článku budeme zabývat dědictvím.

I když však nechceme vracet žádnou konkrétní hodnotu, musíme to v programu explicitně uvést. Abychom tak učinili, můžeme prohlásit, že metoda vrací void value, což v C# a podobných jazycích znamená, že nic nevracíme.

Prvek [2], Speak() , je název metody a je to to, co používáme k volání nebo provádění metody. Všimněte si, že metody, stejně jako vlastnosti, patří k objektu.

Prvek [3], blok kódu , je kód, který program spustí, když zavoláme metodu. Můžete také vidět tento druh bloku kódu, který se také nazývá tělo metody . Právě teď, v rámci tohoto bloku kódu, řekneme konzoli, aby napsala řádek obsahující „Woof“.
.

Zveřejnění vaší metody

Nyní, když máme metodu, můžeme ji zavolat nebo spustit z našeho programu a nechat štěkat psa. Je tu však problém, který mi dává skvělou příležitost zopakovat si další z klíčových konceptů objektové orientace.

Normálně, abyste získali přístup k vlastnostem a metodám objektu, měli byste nejprve napsat název proměnné obsahující váš objekt a poté název vaší vlastnosti nebo metody. Chcete-li například získat hodnotu Name string, můžete napsat:

string dogName = myDog.Name;

Chcete-li spustit metodu Speak(), můžete napsat:

myDog.Speak();

Pokud to však uděláte v Program.cs, zobrazí se chybová zpráva, jak je znázorněno na obrázku 4.

Obrázek 4:Chyba úrovně ochrany

Chyba oznamující, že „PettingZoo.Dog.Speak()“ je nepřístupný kvůli úrovni ochrany“ se vyskytuje kvůli klíčovému konceptu v OO zvaném abstrakce .

Stručně řečeno, abstrakce nám bere podrobnosti o tom, jak něco funguje, když tyto podrobnosti znát nepotřebujeme. V našem programu potřebujeme pouze vědět, že pes umí mluvit, ale ve skutečnosti nás nezajímá, jak to dělá.

Abstrakce místo toho umožňuje návrháři třídy přijít s přístupovými body do třídy, přes které mohou s objekty pracovat. Mnoho jazyků umožňuje tento přístup prostřednictvím modifikátorů přístupu .

C# ve výchozím nastavení skrývá vlastnosti a metody mimo třídu. Zásady týkající se tohoto druhu oddělení se však v jiných jazycích liší a některé jazyky jako JavaScript tuto úroveň ochrany ani nenabízejí.

Zůstává však zásada, že zveřejníte, co chcete, aby všichni používali, a zbytek schováte. Vytvoření veřejné části, alespoň v C#, jednoduše znamená přidání klíčového slova public před vlastnostmi a metodami, ke kterým chcete mít přístup. Pokud tedy aktualizujete Dog třídy přidat public před void Speak() řádek v Animals.cs, v Program.cs červené vlnovky zmizí, jak je znázorněno na obrázku 5.

Obrázek 5:Veřejné prohlášení o metodě

Jako další bonus, když svou metodu zveřejníte, Visual Studio přidá metodu k dostupným možnostem prostřednictvím systému automatického doplňování IntelliSense. Když napíšete myDog a stisknete tečku, získáte seznam všech veřejných vlastností a metod tohoto objektu, jak je znázorněno na obrázku 6.

Obrázek 6:Automatické dokončování Visual Studio Intellisense s naší novou veřejnou metodou

Jiné editory kódu mají podobné systémy automatického dokončování. Tato automatická dokončování jsou jednou z hlavních výhod těchto editorů pro programátory:tyto funkce se naučíte milovat, až se budete vyvíjet jako programátor!

.
Nyní, když jsme opravili všechny chyby, měli bychom být schopni spustit náš program a vidět, že pes štěká. Do souboru Program.cs můžete umístit bod přerušení kliknutím na levý okraj nebo umístěním kurzoru na závorku za myDog.Speak() a stisknout F9. Poté stiskněte F5 pro spuštění programu. Měli byste vidět vyskakovací konzolu a měl by se objevit výstup štěkotu vašeho psa, jak je znázorněno na obrázku 7.

Obrázek 7:Náš pes mluví!

Samozřejmě, nyní můžeme vytvořit vrh psů vytvořením více proměnných a vytvořením objektů do nich. Můžete zkusit něco jako obrázek 8, například:

Obrázek 8:Dva psi mluví

Máte podobný výsledek? Super, poplácej se po zádech, ale jen jednou, protože nás ještě čeká další práce. Koneckonců jsme slibovali, že nám objektová orientace umožňuje vytvářet jedinečné objekty, a vše, co jsme udělali, je vytvořit dva identické „psy“. Dále vám ukážeme, jak používat konstruktory k vytváření samostatných a jedinečných objektů.
.
.


Linux
  1. Jak programovat s Bash:Syntaxe a nástroje

  2. Flatpak na Linuxu:Co to je a jak s ním instalovat aplikace

  3. Jak podložit soubor pomocí FF pomocí dd?

  1. Jak nastavit LogAnalyzer s Rsyslog a MySQL

  2. arp požadavek a odpověď pomocí programování c socket

  3. Odstranění souborů pomocí rm pomocí find a xargs

  1. Jak shromažďovat systémové a aplikační metriky pomocí Metricbeat

  2. Jak vyloučit soubory a adresáře pomocí Rsync

  3. Jak synchronizovat soubory a adresáře pomocí Zaloha.sh