Dimostrare i principi orientati agli oggetti ai non programmatori che utilizzano oggetti di scena fisici [chiuso]

8

Stiamo per iniziare a collaborare con un nuovo campo di addestramento per la codifica nel mio lavoro, in cui le persone di altri dipartimenti possono venire a sapere come codificare dalla gente dell'IT. Mentre questo è fantastico e tutto, sono in un sottaceto. Mi è stato chiesto di trovare un modo per dimostrare fisicamente i concetti di ereditarietà, polimorfismo, rapporti di has-a ed is-a con una dimostrazione fisica di qualche tipo. In effetti, mi chiedono di usare gli oggetti di scena per dimostrare questi concetti a persone che non sanno nulla di programmazione e informatica!

Esistono buone analogie o dimostrazioni che hai utilizzato o visto per dimostrare questi principi?

    
posta Adam Wells 23.11.2016 - 22:54
fonte

6 risposte

12

Insegnare i principi OO ai non programmatori è come insegnare le immersioni alle persone che non sanno nuotare.

Detto questo , ecco alcune possibilità con oggetti di scena suggeriti che puoi portare in classe e passare (o almeno mostrare) per illustrare i concetti:

Ereditarietà:

Props:

  • Una serie di iPhone di versioni diverse, dal primo iPhone, tramite iPhone 6, 6+ ecc.

Spiegazione: dì loro che ogni nuovo iPhone è un miglioramento incrementale del suo predecessore immediato. La maggior parte delle interiora sono le stesse, ma alcune sono state migliorate. Lo stesso per le funzionalità. Dì poi anche che alcune parti potrebbero letteralmente essere le stesse parti del primo iPhone che non aveva motivo di cambiare.

Polyporphism:

Props:

  • Unaseriedielettrodomestici,comeuncaffettiera,untelevisore,unfrullatore,unaradio,unalampadadatavolo.Ancheunapresaamuro.

Spiegazione:poichétutteleappliancesonoconformiallastessainterfaccia(tuttehannospineconconnettorichesiadattanoaiforidellepreseamuro),tuttigliartefatticatottengonoenergiadaunatalespina.Dalpuntodivistadelsocket,nonimportaqualetipodiapplianceseicollegatoallaretepurchésiaconformealla"interfaccia" del socket.

is-a:

Puntelli:gliiPhonedicuisopra

Spiegazione:ogniiPhone7èuniPhone,ogniiPhoneèunosmartphone,ognismartphoneèuntelefono.

Has-a:Composition

Puntelli:gliiPhonedicuisopra,oltreaunpannellotouchscreenindipendente.

Spiegazione:ogniiPhonehaunpannellotouchscreen(lacosatrasparenteconuncavopiattoattaccatoallato).Ilpannellotouchscreenseparatodall'iPhonenonèdigrandeutilità.Nonvedipersonecheportanointascaipannellitouchscreenstaccaticonilcavopiattoappesofuori.

Has-a:Aggregation

Puntelli:unportachiavicontasti,puntatorelaser,apribottiglie,unaflashdrive,uncontrollodell'allarmeperautoealtriciondolieportachiavi.

Spiegazione:unportachiavièunoggettocompositoconunsaccodichiavicollegate,itasti,ipuntatorilaseregliapriscatolepossonofunzionaredasolisenzaesserecollegatiaunportachiavienéilportachiaviolostrumento(chiave,ecc.)èlasciatoinunostatoinstabile.Èpossibileaggiungereerimuoverequestielementialportachiavimapossonoesisteredasolicomestrumentifunzionali.Ilportachiavidipersépuòessereepmty,enonsipuòdirechesiarottoacausadiciò.

NOTA:quellelezioninoninsegnerannoveramenteallagenteOOP,comeilmetodo Chineasy non ti insegnerà il mandarino. Sarà solo una divertente (si spera) intuizione per un modo di pensare alieno.

    
risposta data 24.11.2016 - 13:45
fonte
2

Inizia con le basi. Non usare oggetti fisici come oggetti di scena per suggerire cose che potrebbero essere oggetti, perché è un modo fuorviante di pensare ai sistemi orientati agli oggetti. Prendi invece una foglia dalle Lezioni natalizie dell'istituto reale e usa il tuo pubblico come oggetti di scena. Invitali a fare volontariato e assegna ad alcuni di loro il ruolo di essere oggetti in un vero e proprio sistema orientato agli oggetti. Forse uno di loro è una coda e pochi altri produttori e consumatori, o qualcosa del genere. Mostra loro che la cosa importante di un oggetto è il suo comportamento nel modo in cui si relaziona con altri oggetti, non quali modelli (perché in molti casi non modella nulla tangibile).

    
risposta data 24.11.2016 - 18:06
fonte
1

La mia esperienza personale è che anche alcuni sviluppatori junior senza alcun background accademico in informatica che hanno appena imparato la programmazione effettuando ricerche su Internet non sono in grado di comprendere correttamente i dettagli di OOP. Ad esempio usando nomi propri per proprietà o scrivendo metodi corti, e la lista continua. Penso che insegnare concetti OOP a persone che non sono mai state esposte alla programmazione è un eccesso e si trasformerebbe rapidamente in delusione.

Suggerirei di iniziare con alcune basi di programmazione nella lingua di tua scelta e quindi di semplificare lentamente perché ad esempio stai ereditando da un'altra classe o perché stai creando classi annidate e poi dici loro "Ok, questa cosa è La relazione Is-A e quella cosa è Has-A relationship ", ecc.

    
risposta data 24.11.2016 - 03:08
fonte
1

Dovresti concentrarti sulle funzioni più importanti di OO. Questi sono incapsulamento, distinzione interfaccia / implementazione e accoppiamento lento.

Quello che non dovresti fare è fare un grosso problema con le gerarchie di ereditarietà e usare le tassonomie come metafora per questo. In primo luogo, l'ereditarietà non è un concetto così importante in OO, in secondo luogo, le metafore popolari sono in realtà più fuorvianti che illuminanti. Le classi non sono in realtà come specie di animali o di frutta o altro.

Penso che una cucina sarebbe un'utile metafora. Una cucina richiede un sacco di funzionalità complesse al fine di essere in grado di cucinare cibo. Ma non è costruito come una grande macchina interconnessa. Piuttosto è costruito con componenti come forno, frigorifero, lavello ecc. Ogni componente ha un unico scopo ben definito. Sono sostituibili: è possibile cambiare il forno in un forno diverso da un altro fornitore e si adatta allo stesso spazio e ha praticamente la stessa interfaccia. Si collegano tutti agli stessi tubi e prese. I componenti sono accoppiati in modo lasco: il cambio del forno non farà cambiare il comportamento del frigorifero. Un difetto di progettazione nel frigorifero non influirà sugli altri componenti. L'addetto alla riparazione del forno deve solo essere esperto nei forni.

Consideriamo ora se una cucina è stata costruita come una grande "macchina" con tutte queste funzionalità (capacità di cuocere, congelare, mescolare, raffreddare ecc.), ma non separata in componenti. Non saresti in grado di sostituire o aggiungere componenti da diversi fornitori. Forse alcune delle funzionalità di questa particolare cucina sono sub-par, ma non c'è nulla che tu possa fare. L'addetto alle riparazioni dovrà capire tutto perché è una grande macchina. C'è il rischio che un errore di progettazione nel forno causi l'esplosione del lavandino. E così via.

Nota che questo non aiuterà nessuno a imparare a scrivere il codice. Non impari a codificare tramite metafore: impari a codificare scrivendo codice per risolvere i problemi.

    
risposta data 24.11.2016 - 19:34
fonte
0

Usa la classificazione degli animali e gli animali imbalsamati, se lo desideri

Questo è il giusto equilibrio di accessibilità fuzzy con la sensazione che si tratti di "materiale scientifico" serio. Usa alcuni animali di peluche a basso costo come oggetti di scena, se vuoi, e magari usa una presentazione di PowerPoint con frequenti foto di animali - persone come animali, e la maggior parte "rianimerà" ogni volta che avranno una buona immagine animale.

Aiuta che il sistema di classificazione biologica è una "cosa reale" e che la maggior parte dei diplomati delle scuole superiori lo ricorderà un po '.

CAVEATS :

  1. L'unico avvertimento è che occasionalmente puoi imbatterti in una persona il cui mondo la vista è sfidata discutendo un argomento relativo all'evoluzione. tu può assicurare quelle persone di cui "stai solo parlando animali classificazione . "

  2. La metafora animale funziona meglio se conosci un po 'di biologia e dell'animale sistema di classificazione. Se davvero non ricordi la tua scuola superiore bio e dimentica gli attributi comuni dei mammiferi, potresti stare meglio usando un esempio che puoi parlare autorevolmente.

    In ogni caso, evita i temi high-tech per il tuo esempio. La maggior parte dei laici veramente non si preoccupa dei modelli di computer o delle periferiche. Questi motivi non faranno altro che rinforzare le nozioni che il tuo pubblico probabilmente avrà già, camminando dentro, che l'intera materia è "solo per i tecnici".

Concetti da descrivere:

Classi e oggetti - L'ideale del cane, contro i cani individuali.

Metodo e attributi - I cani sono pelosi. I cani possono abbaiare.

Sostituzioni - Non tutti i cani hanno i capelli.

Ereditarietà - I cani sono mammiferi. I cani possono generalmente fare ciò che i mammiferi possono fare (ereditarietà del metodo) hanno attributi che i mammiferi hanno (attributo ereditarietà).

Classi astratte - Nessun animale reale è solo un mammifero.

Ereditarietà di una classe concreta - I levrieri scozzesi sono cani senza metodo di abbaio .

Composizione - Un cane o un altro animale possono avere un collare, ma un collare non fa parte dell'animale.

Concetti un po 'più avanzati

Quanto sopra è il più lontano che abbia mai avuto in una prima conversazione, ma puoi continuare:

Associazione : un cane o un gatto possono avere un collare. Ma il collare è anche un oggetto indipendente. Puoi dare via il cane, ma tieni il colletto.

Aggregation : un pesce può appartenere a una scuola . Se la scuola viene inghiottita da una balena, la scuola viene distrutta, insieme a tutti i pesci in essa contenuti.

Catene di ereditarietà - Cane è Mammifero è Vertibrate è un Animale è un forma di vita. (E ricorda che anche i sistemi informatici possono essere così complessi).

Coinvolgi il tuo pubblico

Questi sono tutti concetti difficili, e probabilmente otterrai molti sguardi vitali se non tieni attivamente coinvolta la gente e parli.

Ad esempio, non elencare gli attributi e i metodi del cane da soli, chiedere l'input dal gruppo. (Le persone sono cablate per interessarsi agli animali, quindi questo aiuta.)

    
risposta data 24.11.2016 - 16:49
fonte
-3

LEGO

Ottieni lego e costruisci un'auto (classe base)

Quindi avere la stessa auto con le luci (funzionalità aggiunta)

Quindi la stessa auto con ruote grandi (sostituzioni)

Quindi prendi una moto (diversa classe base)

Quindi prendi una macchina con le gomme tolte da due ruote e una luce. fallo sembrare orribile. (cercando di sfruttare la funzionalità della moto in un sistema esistente)

    
risposta data 24.11.2016 - 10:34
fonte

Leggi altre domande sui tag