Demonstrar Princípios Orientados a Objetos a não programadores usando objetos físicos [fechado]

8

Estamos prestes a ajudar com um campo de treinamento novo em codificação no meu trabalho, onde pessoas de outros departamentos podem aprender como codificar com o pessoal de TI. Enquanto isso é ótimo e tudo, estou em apuros. Pediram-me que apresentasse uma maneira de demonstrar fisicamente os conceitos de herança, polimorfismo, relacionamento tem e é com uma demonstração física de algum tipo. Efetivamente, eles estão me pedindo para usar adereços para demonstrar esses conceitos para pessoas que não sabem nada sobre programação e ciência da computação!

Existem boas analogias ou demonstrações que você usou ou viu para demonstrar esses princípios?

Adam Wells
fonte
1
Eu acho que o Google retornará muitos exemplos.
qwerty_so
2
Olá Adam, não me entenda mal, mas esse é um tipo típico de pergunta que é muito ampla para este site ou precisa de referências a recursos de terceiros, que também são externos. Também se enquadra na categoria "aconselhamento educacional é fora de tópico". Eu recomendo a exclusão automática antes de receber muitos votos negativos da comunidade.
Doc Brown
3
Cuidado para não misturar "is-a" no sentido de "is-an-instance-of" e "is-a" no sentido de "herda-de". Classes são conceitos de coisas, mas os objetos ao seu redor na sala de treinamento serão instâncias de classes.
Simon B
1
Não deixe seus outros departamentos começarem a escrever código para a empresa.
gardenhead
1
A propósito, eu apenas notei que ninguém explicou o que é uma INTERFACE. Para ser sincero, acho que seria melhor descartar a herança e apenas falar sobre interface. Como a interface pode ser mapeada diretamente para as funções, isso é mais fácil.
Walfrat 25/11

Respostas:

11

Ensinar princípios de OO a não programadores é como ensinar mergulho a pessoas que não sabem nadar.

Dito isto , aqui estão algumas possibilidades com adereços sugeridos que você pode levar para a sala de aula e distribuir (ou pelo menos mostrar) para ilustrar os conceitos:


Herança:

Adereços:

  • Uma série de iPhones de diferentes versões, desde o primeiro iPhone, passando pelo iPhone 6, 6+, etc.

Explicação: diga a eles que cada novo iPhone é uma melhoria incremental do seu antecessor imediato. Que a maioria das entranhas é a mesma, mas algumas foram melhoradas. O mesmo para as funcionalidades. Diga até que algumas partes poderiam ser literalmente as mesmas partes do primeiro iPhone que não tinham motivos para mudar.

insira a descrição da imagem aqui


Poliporfismo:

Adereços:

  • Uma série de eletrodomésticos, como cafeteira, aparelho de TV, liquidificador, rádio, abajur. Também uma tomada de parede.

Explicação: Como todos os dispositivos estão em conformidade com a mesma interface (todos eles têm plugues com pinos que encaixam nos orifícios da tomada), todos os artefatos de gato obtêm energia desse plugue. Do ponto de vista do soquete, não importa que tipo de dispositivo você está plugado na rede, desde que esteja em conformidade com a "interface" do soquete.

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui


É um:

Adereços: os iPhones acima mencionados

Explicação: todo iPhone 7 é um iPhone, todo iPhone é um smartphone, todo smartphone é um telefone.


Has-a: Composition

Adereços: os iPhones mencionados acima, além de um painel touch-screen destacado.

Explicação: todo iPhone possui um painel de tela sensível ao toque (a coisa transparente com um cabo plano preso na lateral). O painel da tela de toque separado do iPhone não é de muita utilidade. Você não vê pessoas carregando nos bolsos painéis de tela de toque separados com o cabo plano pendurado.

insira a descrição da imagem aqui

Has-a: Agregação

Adereços: um chaveiro com chaves, ponteiro laser, um abridor de bonés, um pen drive, um controle de alarme de carro e outras bugigangas e berloques.

Explicação: Um chaveiro é um objeto composto com muitas chaves anexadas, as chaves, os ponteiros a laser e os abridores de latas podem funcionar sozinhos sem serem anexados a um chaveiro e nem o chaveiro nem a ferramenta (chave, etc.) são deixados em um estado instável. Você pode adicionar e remover esses itens ao chaveiro, mas eles podem existir sozinhos como ferramentas funcionais. O chaveiro em si pode ser eficiente, e você não pode dizer que está quebrado por causa disso.

insira a descrição da imagem aqui


NOTA: essas aulas não ensinam realmente as pessoas OOP, assim como o método Chineasy não ensina mandarim. Será apenas uma visão divertida (espero) de uma maneira estranha de pensar.

Tulains Córdova
fonte
3
Por herança, gosto de outra analogia de smartphone: telefones Android puros vs telefones Android com itens de fabricante no topo. O último herda claramente do primeiro. Sua série de smartphones é mais como lançamentos diferentes de um produto, menos como herança.
RemcoGerlich
O @RemcoGerlich OP pediu exemplos físicos . Você está falando sobre software (sistema operacional Android). Além disso, um telefone LG e um telefone HTC não são relacionados, diferentes implementações de algo, o que os biólogos chamam de evolução convergente. Eles apenas usam algum sabor do mesmo sistema operacional (novamente, software). O exemplo do iPhone é sobre coisas físicas construídas de forma incremental sobre o plano da geração anterior, em vez de inventar tudo do zero todas as vezes.
Tulains Córdova
2
Isso é incrível. Eu tenho que lembrar esta próxima vez post eu tenho que explicar isso :)
Quentin
Eu não acho que os telefones sejam úteis. Eles representam versões / gerações mais do que qualquer outra coisa. E eles são muito nerds para esse propósito em primeiro lugar.
Martin Maat
@ TulainsCórdova: A evolução convergente acontece separadamente , mas a HTC e a LG estão muito conscientes do que o outro está fazendo e está influenciando o processo deles. Em segundo lugar, você está certo de que o exemplo do SO / fabricante nativo do SO não é físico, mas é um exemplo melhor de herança. Seu exemplo de IPhone parece implicar que cada telefone herda de seu antecessor, mas isso não seria uma boa maneira de modelar esse comportamento. Caso contrário, usando o exemplo do SO, sugiro encontrar um exemplo melhor de herança, por exemplo, como três pessoas diferentes (gerente, zelador, professor) são todas a mesma pessoa subjacente .
Flater
3

Comece com o básico. Não use objetos físicos como acessórios para sugerir coisas que podem ser objetos, porque essa é uma maneira enganosa de pensar sobre sistemas orientados a objetos. Em vez disso, tire uma folha das Palestras de Natal da Royal Institution e use seu público como adereços. Faça com que vários deles sejam voluntários e atribua a alguns deles o papel de serem objetos em um sistema orientado a objetos real e realista. Talvez um deles seja uma fila e alguns outros produtores e consumidores, ou algo assim. Mostre a eles que o importante sobre um objeto é seu comportamento na forma como ele se relaciona com outros objetos, não no que ele modela (porque, em muitos casos, ele realmente não modela nada tangível).

Jules
fonte
Boa ideia e parece muito com o "jogo" dos cartões Xtreme Programming CRC .
Tulains Córdova
1

Minha experiência pessoal é mesmo de alguns desenvolvedores juniores, sem formação acadêmica em ciência da computação, que acabaram de aprender programação pesquisando na internet, não conseguem compreender adequadamente os detalhes da OOP. Por exemplo, usando nomes próprios para propriedades ou escrevendo métodos breves, e a lista continua. Eu acho que ensinar conceitos de POO para pessoas que nunca foram expostas à programação é um exagero e que rapidamente se transformaria em decepção.

Eu sugeriria começar com alguma programação básica na linguagem de sua escolha e depois entender lentamente por que você está herdando, por exemplo, de outra classe ou por que você está criando classes aninhadas e, finalmente, dizer a elas "Ok, isso é IS-A relacionamento e essa coisa é relacionamento Has-A ", etc.

Armin K
fonte
1

Você deve se concentrar nos recursos mais importantes do OO. São encapsulamento, distinção interface / implementação e acoplamento flexível.

O que você não deve fazer é tirar proveito das hierarquias de herança e usar taxonomias como metáfora para isso. Primeiro, herança não é um conceito tão importante em OO; segundo, as metáforas populares são na verdade mais enganosas do que esclarecedoras. As aulas não são nada como espécies de animais, frutas ou qualquer outra coisa.

Eu acho que uma cozinha seria uma metáfora útil. As cozinhas exigem muitas funcionalidades complexas para poder cozinhar alimentos. Mas não é construído como uma grande máquina interconectada. Pelo contrário, é construído com componentes como forno, geladeira, pia etc. Cada componente tem um único objetivo bem definido. Eles são substituíveis - você pode mudar o forno para um forno diferente de outro fornecedor, e ele até se encaixa no mesmo espaço e tem basicamente a mesma interface. Todos eles se conectam aos mesmos tubos e tomadas. Os componentes estão fracamente acoplados: A troca do forno não fará com que a geladeira mude seu comportamento. Uma falha de design no refrigerador não afetará os outros componentes. O reparador do forno só precisa ser especialista em fornos.

Agora considere se uma cozinha foi construída como uma grande "máquina" com toda essa funcionalidade (capacidade de assar, congelar, mexer, esfriar etc.), mas não separada em componentes. Você não seria capaz de substituir ou adicionar componentes de diferentes fornecedores. Possivelmente, algumas das funcionalidades nesta cozinha em particular estão abaixo da média, mas não há nada que você possa fazer. O técnico de reparos terá que entender tudo, porque é uma grande máquina. Existe um alto risco de que um erro de projeto no forno cause a explosão da pia. E assim por diante.


Observe que isso não ajudará ninguém a aprender a codificar. Você não aprende a codificar através de metáforas - aprende a codificar escrevendo código para resolver problemas.

JacquesB
fonte
+1 Por apontar que analogias com animais são maus exemplos.
Tulains Córdova
1

Use Classificação de Animais e animais empalhados, se quiser

Isso atinge o equilíbrio certo de acessibilidade imprecisa com a sensação de que isso é sério "material científico". Use alguns bichos de pelúcia baratos como adereços, se quiser, e talvez use uma apresentação do PowerPoint com fotos frequentes de animais - pessoas como animais, e a maioria se animará sempre que tiverem uma boa foto do animal.

Ajuda que o sistema de classificação biológica seja uma "coisa real" e que a maioria dos graduados do ensino médio se lembrará um pouco dele.

CAVEATS :

  1. A única ressalva é que ocasionalmente você pode encontrar uma pessoa cuja visão de mundo é desafiada discutindo um assunto relacionado à evolução. Você pode garantir às pessoas que está "apenas falando sobre classificação de animais ".

  2. A metáfora animal funciona melhor se você souber um pouco sobre Biologia e o sistema de classificação animal. Se você realmente não se lembra da biografia da High School e se esquece dos atributos comuns dos mamíferos, talvez seja melhor usar um exemplo do qual possa falar com autoridade.

    De qualquer forma, evite temas de alta tecnologia para o seu exemplo. A maioria dos leigos realmente não se importa com modelos de computador ou periféricos. Esses motivos apenas reforçarão as noções que seu público provavelmente já terá, entrando, que todo esse assunto é "apenas para técnicos".

Conceitos para descrever:

Classes e objetos - O ideal do cão, contra os indivíduos.

Método e atributos - Os cães são peludos. Cães podem latir.

Substituições - nem todos os cães têm pêlos.

Herança - Cães são mamíferos. Os cães geralmente podem fazer o que os mamíferos (herança de método) têm atributos que os mamíferos têm (herança de atributo).

Classes Abstratas - Nenhum animal real é apenas um mamífero.

Herança de uma classe concreta - os cervos escoceses são cães que não têm método de latir .

Composição - Um cachorro ou outro animal pode ter uma coleira, mas uma coleira não faz parte do animal.

Conceitos ligeiramente mais avançados

O exposto acima é o mais longe que eu já entendi em uma primeira palestra, mas você pode continuar:

Associação - Um cão ou um gato pode ter uma coleira. Mas o colar também é um objeto independente. Você pode doar o cachorro, mas mantenha a coleira.

Agregação - Um peixe pode pertencer a uma escola . Se a escola é engolido por uma baleia, a escola é destruída, juntamente com todos os peixes nele.

Cadeias de herança - Dog é um mamífero é um Vertibrate é um animal é uma forma de vida. (E ressalte que os sistemas de computador também podem ser tão complexos.)

Envolva seu público

Todos esses são conceitos difíceis, e você provavelmente receberá muitos olhares vítreos se não mantiver as pessoas ativamente envolvidas e conversando.

Por exemplo, não liste os atributos e métodos dos cães, peça informações ao grupo. (As pessoas são conectadas a se interessar por animais, o que ajuda.)

Tim Grant
fonte
Observe com certeza sobre composição, seria melhor para algo como um computador ser composto de CPU, .... A propósito, você esqueceu de distinguir agregação forte (composição) e fraca. Se eu morrer, minha mão também morrerá, mas não meu computador. Substituição: mais alguma coisa na linha: não o cão ataca da mesma maneira.
Walfrat
1
Exemplos de animais para explicar os conceitos de OO não são uma das melhores escolhas. Muito gotejante e juvenil. Além disso, o OP deseja usar adereços físicos como recursos didáticos.
Tulains Córdova
1
@ TulainsCórdova, sua própria resposta sugere o quão malsucedido você tem ensinado às pessoas não técnicas o básico do OO. Os animais mantêm as pessoas mais engajadas e não há nada de "vazamento" ou juvenil na biologia. Além disso, minha resposta menciona adereços no título.
Tim Grant
@ TimGrant Eu nunca ensinei ou expliquei OOP para não programadores, mas vi outros falharem usando exemplos de animais. O ramo científico da biologia não é gotejante ou juvenil, eu estava falando sobre explicar o POO com exemplos de animais. É tão banal. Nenhuma ofensa pretendida.
Tulains Córdova
@ TulainsCórdova, você diz gotejante, juvenil e agora “banal”? A trivialidade exigiria que o público já tivesse ouvido isso antes, e esse público não ouviu. Você tem alguma ideia real a oferecer ou está apenas jogando sombra em uma resposta competitiva?
Tim Grant
-3

LEGO

Pegue um lego e construa um carro (classe base)

Então, tenha o mesmo carro com luzes (funcionalidade adicional)

Em seguida, o mesmo carro com rodas grandes (substituições)

Então pegue uma moto (classe base diferente)

Então pegue um carro com os pneus retirados de duas rodas e uma luz. faça parecer horrível. (tentando alavancar a funcionalidade da moto em um sistema existente)

Ewan
fonte