Eu tenho muitos amigos que têm formação em engenharia elétrica / física / mecânica e estão curiosos sobre o que é "OOP". Todos eles conhecem Matlab muito bem, portanto, eles têm um histórico básico de programação; mas eles têm muita dificuldade em entender um sistema de tipos complexo que pode se beneficiar dos conceitos introduzidos pelo OOP.
Alguém pode propor uma maneira de tentar explicar isso a eles? Só não estou familiarizado com o Matlab, por isso estou tendo problemas para encontrar paralelos. Eu acho que usar exemplos simples, como formas ou animais, é um pouco abstrato demais para esses engenheiros. Até agora, tentei usar uma interface Matrix vs implementações baseadas em array / esparsas / qualquer que seja, mas isso não funcionou tão bem, provavelmente porque diferentes tipos de matriz já são bem suportados no Matlab.
fonte
Respostas:
Desde 2008, o Matlab suporta programação orientada a objetos. Portanto, se eles quiserem descobrir sobre OOP de uma maneira familiar, podem querer dar uma olhada na documentação do Matlab sobre OOP , especialmente nos exemplos .
Há um tempo, eu estava apresentando alguns dos meus colegas que usam o Matlab à OOP. Aqui estão alguns exemplos que eu usei.
Importante, tudo que você faz com OOP, também pode fazer o contrário. O que o OOP permite é (1) criar estruturas mais impressionantes, (2) agrupar código e (3) facilitar a modularização do código e a programação mais rápida.
Estruturas com campos que se atualizam automaticamente. Por exemplo, você armazena uma coordenada em pixels (porque a mede em uma imagem), mas para cálculos de distância, você deseja tê-la em mícrons. Armazenar os dois em uma estrutura é problemático, porque se você alterar um, não se esqueça de mudar o outro (e você o fará). Assim, você escolhe armazenar todas as coordenadas em mícrons, o que significa que toda vez que você precisar em pixels, é necessário convertê-lo, o que é irritante e pode estar sujeito a erros.
Com um objeto, você faz da "coordenada em pixels" uma propriedade dependente, a conversão se torna automática e você não precisa se preocupar em atualizar duas coordenadas ao mesmo tempo. Claro, você pode fazer muito mais. Por exemplo, sua estrutura pode ter um método 'edit', que abre uma GUI, para que você possa editar valores facilmente. Ou pode ter um método de salvamento chamado sempre que um valor na estrutura é alterado.
Você pode agrupar funções com sua estrutura de dados. Por exemplo, você pode ter uma função de plotagem personalizada para os dados que você chama
plot(myDataStructure)
. Da mesma forma, você pode terdisp
métodos personalizados ou até anexar seus métodos de processamento de dados aos seus dados.fonte
struct
com métodos é muito mais atraente do que as do Matlab.struct
C possui recursos fundamentais de OOP que as classes do Matlab não possuem?Não tente encontrar um exemplo de ponte. OOP é adequado em áreas totalmente diferentes do que o 'código no estilo matlab' (e vice-versa). Eu usaria o mesmo tipo de explicação que entregaria a alguém que conhece um pouco de programação procedural, mas nunca trabalhou com estruturas ou estruturas de dados semelhantes.
fonte
O código MATLAB vetorizado possui uma sensação declarativa fortemente funcional, onde matrizes são freqüentemente vistas como amostras em algum espaço e operações nessas matrizes como transformações desse espaço. Quando um fenômeno, processo ou entidade é modelado usando o MATLAB (vetorizado), geralmente existe uma representação numérica explícita que opera como um intermediário entre a lógica do programa e os elementos conceituais da entidade que está sendo modelada. Como resultado, as complexidades no domínio do problema tendem a ser refletidas como complexidade numérica, em vez de complexidade da lógica do programa ou do fluxo de controle.
O paradigma orientado a objetos tem uma sensação muito diferente: é frequentemente usado em conjunto com uma abordagem muito mais direta para modelar relacionamentos estruturais no mundo. Em muitos casos, o programa OO é um modelo direto de uma entidade, onde a lógica do programa constrói espelho, direta ou indiretamente, atributos e propriedades do sistema que está sendo modelado. Como resultado disso, a lógica do programa OO tende a ter uma "profundidade" mais estrutural (e possivelmente complexidade), pois reflete mais diretamente os meandros do sistema em teste.
Dito isto, há muitas situações em que o paradigma de modelagem de objetos está muito bem alinhado com a maneira como um problema específico é entendido e descrito. Esse é particularmente o caso quando se tenta modelar entidades discretas com uma gama mais diversificada de atributos e comportamento, de modo que considerar cada entidade individualmente e isoladamente seja mais informativo do que considerar cada propriedade individualmente e as entidades juntas como uma população.
Com o POO, você passa um tempo pensando em entidades individuais e suas propriedades. O comportamento coletivo é mais difícil de visualizar e observar. Estruturas e relacionamentos tendem a ser expressos explicitamente no código.
Com o MATLAB vetorizado, você passa um tempo pensando em populações de entidades. O comportamento coletivo é mais fácil de observar. Estruturas e relacionamentos tendem a ser expressos implicitamente no código.
fonte
A maioria dos programadores está familiarizada com um aspecto importante da programação orientada a objetos, a estrutura. Eu explicaria que um objeto é como uma estrutura, mas tem suas próprias chamadas de função para lidar com os dados dentro da estrutura. Em seguida, adicione lentamente detalhes adicionais, como herança, transmissão de funções, etc.
fonte
Então é bem simples: deixe-os tentar o simulink. Os modelos Simulink estão no espírito da OOP. Se eles entenderem como criar um modelo de simulink e se souberem como o simulink funciona, eles já saberão o que é o OO.
fonte
Matlab é apenas uma linguagem. OOP é o conceito.
Tente explicar os conceitos usando uma explicação menos orientada a exemplo. Os engenheiros certamente entendem diferentes domínios e unidades (por exemplo, adicionar temperatura à distância seria estranho); portanto, eles devem entender intuitivamente o encapsulamento e o polimorfismo sem precisar de exemplos concretos no Matlab. Você deve ser capaz de explicar a abstração com bastante facilidade. Herança e composição seriam mais difíceis de explicar sem exemplos, mas explique o conceito claramente e eles devem entender.
Genéricos versus especificidade de tipo devem ser motivados por meio de exemplos de seus conhecimentos matemáticos. Programação funcional, funções de passagem e lambdas não são OOP em si, e isso é mais difícil de explicar, sem um fundo matemático mais abstrato que normalmente é apresentado aos engenheiros (tendo estudado engenharia, software e matemática, tenho algumas dicas sobre suas diferentes especializações).
Talvez você não consiga fornecer exemplos usando o Matlab diretamente, mas certamente poderia explicar a abstração e o encapsulamento usando exemplos incluindo estruturas. Mesmo em idiomas em que você não pode encapsular suas funções (métodos) com seus dados, você ainda pode explicar como determinadas funções são definidas apenas para determinados domínios.
Considerando que muitos desenvolvedores valorizam a composição sobre a herança, você pode explicar a herança, a composição e os méritos relativos dos dois.
Você pode motivar o polimorfismo de maneira natural revisando a diferença entre números inteiros, racionais, reais e números complexos e, em seguida, explicar como os operadores aritméticos "normais" são funções (métodos), mas mesmo sendo o operador (ex '+') parece o mesmo, é uma função diferente quando usada com domínios diferentes.
Boa sorte!
fonte
Sou engenheiro elétrico, mas tenho mais em comum com programadores de CS do que com programadores de EE. Especificamente, tentei, sem sucesso, convencer meus colegas a escrever pelo menos metade do código estruturado e modular, sem falar no código orientado a objetos.
Quando tentei usar os recursos OO do MATLAB, rapidamente encontrei problemas muito irritantes. Um método em uma classe TEM para tomar um objeto dessa classe como seu primeiro argumento e TEM para retornar o objeto se estiver modificando o objeto. Isso cria um código como
e uso como
Eu quase desisti. Eu sugiro que você os deixe em paz, até que algum suporte decente de OO entre no MATLAB. Peça a eles que desistam do MATLAB e tentem usar o Python ou algo semelhante. Estou tentando (e falhando) fazer isso.
No mínimo, o MATLAB OO não é de forma alguma um bom gateway para aprender OO. Você pode apenas adiá-los para a vida.
fonte