it-swarm-eu.dev

Jak vysvětlit koncepty OOP) netechnické osobě?

Často se snažím vyhýbat se říkat lidem, že jsem programátor, protože většinou jim vysvětlím, co to ve skutečnosti znamená. Když jim řeknu, že programuji v Java), často kladou obecné otázky o jazyce a jak se liší od xay. Nejsem také dobrý v vysvětlování věcí, protože 1) Nemám tolik zkušeností v oboru a 2) opravdu nenávidím vysvětlování věcí netechnickým lidem.

Říká se, že věci opravdu pochopíte, jakmile jim vysvětlíte někoho jiného, ​​v tomto případě, jak byste vysvětlili OOP terminologii a pojmy) netechnické osobě?

10
John

Obecně se snažím popsat objektově orientované programování pomocí příkladů ze skutečného světa.

Mohu například říci, že třída s názvem Vehicle popisuje minimální věci, které vozidlo je. Požádám osobu, aby mi řekla, co si myslí, že je vozidlo. Někdy říkají věci jako „No, jako auto nebo kamion“, a přikývnu a souhlasím s nimi. Pak se zeptám, jaké jsou rozdíly mezi autem a kamionem. Někdy zmiňují velikost, někdy účel a další věci.

Pak je požádám, aby zapomněli na auto nebo na kamion a prostě je požádám, aby pokračovali v popisu vozidla:

"Oh, dobře se to hýbe"

"Má operátora nebo řidiče"

atd...

Brzy víme, co je vozidlo, a řekl jsem, že v OOP) definujeme vozidlo, a kvůli argumentu říkáme, že se může pohybovat, a dát mu řidiče takového druhu. Zeptám se, ok, tak co má auto?

"Dveře"

"Okna"

A pak kamion ...

„Dveře“ „okna“ „Více kol!“

Po dlouhé diskusi druhá osoba brzy identifikovala:

1) Co představuje vozidlo

2) Co představuje auto

3) Co představuje nákladní automobil

4) Co tvoří letadlo.

Vše bez jakýchkoli technických možností. Vlastnosti každého jsme rozdělili do správných oblastí. Chápou dědičnost („Ano, auto je vozidlo, nákladní auto je vozidlo, ale auto není nákladní auto, je to JEDNODUCHÉ, duh!“).

Chápou dokonce i polymorfismus: „Jistě, v zásadě dělají totéž, ale to by mohlo udělat trochu jinak.“. Můžeme mluvit o chování a kde by to mělo žít v našem stromu objektů.

V závislosti na jejich vzdělání a pozadí, někteří si to rychleji než ostatní. Když ale porovnám OOP) s objekty skutečného života, většina lidí to vždy dostane. Ve skutečnosti jsem v rozhovorech s netechnickými lidmi našel věci, na které jsem nikdy nepřemýšlel. musí být obsluhována, například (drony), ale měl by programátor myslet na provozovatele vozidla jako na jeho vlastnost? Neříkám, že je správné nebo špatné, aby byl operátor zmíněn, ale to nás vede k přemýšlení o tom, co modelujeme a čeho se snažíme dosáhnout, když vyvíjíme software.

Nyní, částečná specializace šablony, na druhé straně .... :)

27
Moo-Juice

Objekty jsou podstatná jména, metody jsou slovesa.

14
k rey

Zde je několik verzí mé předpřipravené odpovědi, kterou dávám ultra-technické osobě:

Programování je pokus o vytvoření reprezentace reality v počítači. Existuje již mnoho nástrojů a zařízení, která to již dělají - přemýšlejte o tom, jak nám tabulka usnadňuje reprezentaci účetnictví nebo statistiky, nebo jak nám prezentace PowerPoint umožňuje ukládat a zobrazovat naše prezentace.

Někdy potřebujeme zabudovat vlastní reprezentace reality do nových nebo stávajících aplikací, které odrážejí naše obchodní procesy. Existuje mnoho způsobů, jak programovat, a jedním z nejčastějších způsobů programování je objektově orientované programování, kde kód, který vytváříme, je speciálně navržen tak, aby replikoval koncepty reality. „Věci“ ve skutečnosti mají atributy a chování. Například lidská bytost má často ruce a nohy, barvu vlasů, etnicitu a může často mluvit a chodit.

Mluvení a chůze mohou přicházet v různých variantách, jako je jazyk, kterým člověk mluví, nebo rychlost nebo způsob, kterým člověk chodí.

Lidské bytosti mají často interakce s jinými typy „věcí“, ať už se jedná o zvířata, jiné lidi, jiné živé organismy nebo neživé předměty. Ve skutečnosti existují témata, která často potřebují reprezentaci, jako jsou interakce mezi „věcmi“, kategorizace věcí atd. Zvažte obchodní procesy, které probíhají v naší organizaci. Existuje velmi komplikovaná „obchodní logika“, která musí být zastoupena v softwaru, který naše organizace používá.

Objektově orientované programování poskytuje prostředky k přesnému zobrazení těchto „konceptů skutečného světa“ a „obchodní logiky“.

-> Toto tvrzení obvykle postačuje k odvrácení jejich zvědavosti (nebo je možná nudí), ale pokud mají další otázky, výše uvedené tvrzení (věřím) stanoví slušný základ pro to, kam může konverzace jít. Opravdu si nemyslím, že netechnická osoba se příliš zajímá o technickou terminologii, jako je „Abstrakce“, „Složení“, „Polymorfismus“ atd., Ale pokud ano, jazyk, který jsem použil v konzervovaném prohlášení, mi to umožňuje na základě toho vytáhnout příklady.

3
Tim Claason

Vždy jsem se naučil OOP takto:

Máte hodiny a říká vám to čas - no, při programování dáte všechny kódy a věci, které musíte udělat všechno dohromady (zní to docela zřejmé, ale lidé to tak v dřívějších dobách zvykli). Každopádně se tomu říká zapouzdření.

Nyní máte věc s hodinami, možná budete chtít budík - no, jakmile budete mít všechny věci dohromady, můžete do něj přidat věci, aby to udělalo víc - například nastavit budík a nechat zazvonit. Tomu se říká dědičnost.

Také se podíváte na hodiny, které mám na zápěstí, ale můžete si také zahrát hodiny, které vypadají jinak, jako staré hodiny nebo digitální hodiny. Vypadá to jinak, ale stále jsou to hodiny - dobře se tomu říká polymorfismus.

A tady máte 3 rohy objektově orientovaného programování. Zbytek je jen kódování.

1
gbjbaanb

Mluvil jsem o rozhovoru, který jsem měl s manželkou o této věci, v této odpovědi zde: https://softwareengineering.stackexchange.com/questions/45464/how-to-convince-non-programmer-his- představy o počítačích jsou nesprávné/45467 # 45467

EDIT: Otázka, na kterou jsem odpověděl, byla zmírněna, takže zde odpovím.

Seděla v restauraci s manželkou a zeptala se mě: „Co to znamená Object Oriented?“

Začal jsem bláznit o opětovném použití kódu a enkapsulaci a polymorfismu a v určitém okamžiku jsem si uvědomil, že její oči byly konečně zasklené.

Tak jsem popadl balíček Splenda z kontejneru. Řekl jsem: „Tady je objekt. Jaké jsou jeho vlastnosti?“

Řekla: „Je to obdélníkové, je vyrobeno z papíru, obsahuje splenda, je modré, má na něm potisk.“

Zvedl jsem cukrový balíček. "Co to má společného s tímhle?"

Řekla: „Obdélník, papír, že tam je tisk.“

Řekl jsem: „A co to, že oba obsahují něco sladkého?“

„Jistě.“

Řekl jsem: „Takže to jsou oba případy, které bychom mohli nazvat balíčkem abstraktního sladidla. Platonický balíček ideálního sladidla, pokud se vám líbí.“

„Jistě.“

Řekl jsem: „A každý z nich má vlastnosti zděděné z abstraktního paketu a pak variace, které jsou specifické pro jeho typ věci.“

Řekla: „Správně. Ach!

Řekl jsem: „Bingo: Objektově orientované programování.“

Ty a já víme, že právě intuitovala svou cestu k Factory design pattern. To je jedno. To ilustruje dědičnost, zapouzdření, identitu třídy objektu ... Dobré věci.

1
Dan Ray

Řekl bych jim, aby se zaregistrovali na kurz v OOP, pokud tomu opravdu chtějí porozumět).

Myslím všechny ty analogie jako Car.startEngine (); jsou, přiznejme si to - čistý rap. Když jsem byl před mnoha lety první OOP), zjistil jsem, že tyto domény ještě více abstraktují.

Namísto pouhého vysvětlení, že OOP je o řízení složitosti procedurálních jazyků), téměř 80% autorů programovacích knih předpokládá, že programátoři jsou bezradní idioti, kteří je třeba mluvit jednoduše (viz ironie zde?) podmínky.

Ano, je naprosto normální jít s vysvětlením seznamů a vektorů, protože to je to, s čím většinou pracujeme, ne Car.Engine a PoliceMan.Arrest (pokud nejste herní dev, ale pak znovu, musíte mít svůj podíl na bývalý).

Vrátil jsem se k tématu, jen jsem jim řekl, že vytvářím neměnné objekty, které existují čistě v mysli programátora, za účelem zpracování mezd/hraní her/navigace raketoplánem atd.

Pokud mají stále otázky, přestaňte s nimi diskutovat, protože to za to nestojí. Většina lidí si nedokáže představit abstraktní pojmy a potřebuje příklady pro téměř všechno (což znamená více zjednodušení/specializace aktuálního tématu, opravdu).

1
Jas

Tato otázka se zdá být kandidátem na uzavření, nicméně ...

Jako většina věcí, OOP je ve skutečnosti velmi jednoduché vysvětlit na koncepční úrovni. Programátoři modelovat objekty; a:

  • objekty mají stav (pole/datové členy)
  • objekty mají akce (metody/funkce)
  • objekty staví na sobě (dědičnost)

To jsou jistě stovky jemnějších detailů. Ale pokud se jen snažíte někomu dát 10-sekundový přehled, myslím, že je to dobrý začátek. Existují více specifických konceptů, které máte potíže vysvětlit?

0
zourtney

Příklad mobilního telefonu:

Představte si, že jste majitel továrny, chcete popsat obecný telefon

  • Krok 1: Uveďte seznam těchto obecných vlastností telefonů , např .: výška, hmotnost, barva atd.
  • Krok 2: Uveďte seznam těchto obecných telefonních funkcí , např .: uskutečnit hovor, přijmout hovor, poslat SMS atd.

Nyní, když máte svůj obecný „plán“, vytvořte mi následující telefony:

Telefon 1:

  • Výška -> 102 mm

  • Hmotnost-> 85 g

  • Barva-> Růžová

Telefon 2:

  • Výška-> 125 mm

  • Hmotnost -> 96 g

  • Barva-> Červená

0
Darknight

Líbí se mi příklad automobilu pro vysvětlení dědičnosti (mám sklon používat zvířata spíše než vozidla, ale je to stejný nápad), ale pro vysvětlení toho, jak funguje objektově orientovaný program, odkazuji na analogii, kterou jsem kdysi četl na webových stránkách Chrisa Crawforda: program je jako opravdu efektivní byrokracie. Všechny různé objekty v programu jsou jako různá oddělení byrokracie; každé oddělení má své vlastní určené úkoly, mají dobře definované vstupy (s kým mluvit a jaké formuláře vyplnit) a další oddělení často nevědí tolik o tom, co se děje uvnitř. HR je jako abstraktní továrna, IT je singleton atd.

Získání chybové zprávy, protože jste zadali nesprávnou věc do počítačového programu, je jako vyplnění nesprávného formuláře, který chcete odeslat do kanceláře.

0
jhocking

OOP je hrubé zjednodušení, pokud vůbec něco - abstrakce - procesu lidského myšlení a porozumění světu pro promítnutí funkčnosti do digitálního „prázdnoty“, které napodobuje známé procesy a klasifikace digitálně. V mnoha ohledech jde spíše o náš primitivní jazykový stav, než o nás, že „myslíme spíše jako počítače“.

Pokud by programování napodobovalo realitu nebo lidské myšlenky, bylo by to v přírodě mnohem organičtější, chaotičtější a riskantnější - dokonce postranní. Místo toho zjednodušujeme realitu na kojenecké kroky, „logiku 2 + 2“, hrubé kategorie, opakovaně použitelné malé nástroje a prehistorické uvažování.

Stále se snažíme vymyslet, jak stáhnout své myšlenky a touhy do protokolu a společného jazyka, a já si myslím, že historici budou jednou fascinováni svou sofistikovanou drsností - jako nyní vidíme hieroglyfy. Není to vůbec „chytré“ - jednoduše to ukazuje, jak nemůžeme snadno vysvětlit, jak se rozhodujeme nebo chápeme i ty nejjednodušší věci. Výpočetní technika je stále na úrovni „pes je pes, protože se nejedná o kočku“, na úrovni evoluce myšlení - je to tisíciletí i za základním mluveným jazykem.

0
Glyn

Existují dva druhy čarodějů. Je tu člověk, který dělá magickými slovy konkrétní věci. Má slovo pro vyvolání ohně. Má slovo pro to, aby se zmrzlé kuře objevilo z tenkého vzduchu. A další Slovo pro vytvoření nádoby síly (dávám přednost své síle zelené, zářivé a průsvitné) plné friolační dobroty. Se správným použitím jeho slov může produkovat smažené kuře.

A pak je tu průvodce OOP. Kdo právě zavolá skřeta, který ví, jak jít do obchodu s potravinami, koupit kuře (nebo ingredience pro jakékoli jiné jídlo, které má připravit), uvařit a podávat vám večeři. OOP Wizard nemusí říkat svému impu, jak to udělat. Jen mu musí dát vědět, co chce, což je v tomto případě smažené kuře. Nejen to, průvodce OOP může vyzvat další přisluhovače, aby řekl svému šéfkuchaři, co má dělat.

Incantation guy udělá dojem na večírcích, ale průvodce OOP je ten, kterého chcete, když hodláte zahájit kouzelnou restauraci se spoustou postav (jako třeba říkat, naštvaný číšník Unicorn a troll floor manager), kteří všichni musí spolupracovat. Pokud se pokusíte vyvolat každý krok řešení "restaurace", můžete se snadno zamotat do detailů a je opravdu snadné dělat chyby. Průvodce OOP předškolí své přisluhovače, aby pro něj vyřešil podrobnosti, aby se mohl soustředit na řešení většího problému tím, že nechá své lidi v interakci.

Nemluvě o tom, že je jednodušší znovu použít svého šéfkuchaře pro problém školní jídelny, pak je oddělit všechny nevyžádané položky, které byste mohli nebo nemuseli znovu použít, když to děláte jeden krok po druhém, vyslovením slov a slova, která volají jiné sady slov (což bude čím dál tím více početnější, protože budete muset řešit větší množství problémů).

Abychom byli spravedliví, s velmi, velmi pečlivou aplikací, průvodce zaklínadlem to zvládne tak rychle jako průvodce OOP. Může rozdělit věci správným způsobem tak, že vyvolání správných kouzel nevyžaduje z jeho strany více práce než průvodce [OOP]. Práce je však mnohem těžší pochopit nebo duplikovat a mnohem těžší je znovu použít velké části, protože je to všechno svázané dohromady pro jeden konkrétní složitý problém.

0
Erik Reppen

Myslím, že nejlepší způsob, jak vysvětlit netechnickému typu o OOP, je to s nimi spojit).

V podstatě OOD & OOP) chcete, abyste přemýšleli o systému, který navrhujete a implementujete jako svět interakcí.

Takže, kvůli argumentu (což na internetu nikdy nefunguje), řekněme, že vysvětlujete sběrateli odpadu OOD & P. Jmenuje se Bob. Chodil jsi s ním do školy před 15 lety, narazil jsi do něj v baru a oba předstírali zájem o životy ostatních.

„Takže, Johne, říkáš, že jsi programátor. Můj synovec je ve všech těch nesmyslech. Dělá to dál o objektově orientovaném programování, nebo tak něco. O co jde?“ Všimněte si, že Bob je Brit z pohledu špatně orientovaných.

„No, Bobe,“ odpovíš a přikrčený na orientaci. "Je to docela jednoduché. Sbíráš odmítnutí, že? Co obvykle děláš ve své práci?"

„Dobře, sleduji dodávku po městě, aby zvedl odpadky a vložil je do dodávky,“ odpověděl Bob kvízově.

„Výborně. Představte si, že píšu program, který to simuluje. V objektově orientovaném designu je prvním krokem zjistit, jaké objekty existují. Ve vaší práci se zdá být ulice, koše, ty a dodávka. Dále potřebujeme vědět, jaké chování každý objekt provádí. Nejsem si jistý, jak to funguje ve skutečném světě, ale předpokládejme, že vám řeknou o ulici, která potřebuje zúčtování. Existuje jedno chování - ulice upozorňují, když potřebují zúčtování "To znamená, že je třeba něco poslouchat v ulicích, které potřebují zúčtování. Myslím, že od té doby, co sledujete dodávku, bude dodávka poslouchat z ulic, které potřebují zúčtování - to jsou dvě. Třetí je, samozřejmě, sledujete dodávku. Další dáte odpad do dodávky. Také si všimnete, že je přihrádka plná. Myslím, že dodávka vás bude muset upozornit, až bude plná, a za to budete muset poslouchat. To jsou naše chování. potřeba designu. Objektově orientované programování je v podstatě to, jak implementujete Návrh. Liší se jazyk od jazyka. “

Bob usnul ve svém pivu. Jdete pryč.

0
Matt Ellen