Estou fazendo uma apresentação que mostra as diferenças entre programação estrutural e orientada a objetos e quero ilustrar por que as pessoas precisam de OOP com um exemplo em que a aplicação de conceitos de OOP tornará a codificação muito mais fácil, para que o público realmente sinta que precisa de OOP.
Alguma ideia ??
java
c++
object-oriented
Ahmed
fonte
fonte
Respostas:
Você pode querer dar uma olhada neste blog rápido em vídeo . O resultado é que a diferença entre programação estruturada e programação OO é uma questão do que eles tiram da programação, não do que eles adicionam. Disciplinas de software como Programação Estruturada e Programação Orientada a Objetos são restritivas, não habilitadoras. Aqui estão algumas definições. Aviso: você não vai gostar deles.
Programação estruturada é disciplina imposta ao goto (transferência direta de controle)
Programação OO é disciplina imposta aos ponteiros para funções (transferência indireta de controle)
A programação funcional é a disciplina imposta à atribuição.
O primeiro não é muito difícil de entender. Dijkstra descobriu que era impossível criar provas gerais de correção quando goto era permitido em algoritmos. No entanto, se as estruturas de controle estavam limitadas à sequência, seleção e iteração, as provas de correção eram possíveis. É claro que nem tentamos provar que as coisas estão corretas hoje em dia, mas gostamos da simplicidade e elegância da programação estruturada.
É um pouco mais difícil de entender OO. Geralmente, definimos OO como encapsulamento, herança e polimorfismo. O que menos se sabe é que todos esses três atributos são alcançáveis e freqüentemente foram alcançados em C. De fato, o C ++ começou como apenas um pré-processador compilado em C. Na verdade, não é difícil encapsular em C. Nem é difícil criar estruturas de dados que são subconjuntos, simulando herança. Polimorfismo, no entanto, é um pouco mais difícil. Requer indicadores para funções que, em C, são difíceis de gerenciar bem. O que linguagens como o C ++ nos deu foi a disciplina imposta a esses indicadores de funções. O compilador C ++ construiu as vtables para nós e inicializou os ponteiros dentro deles de acordo com um formalismo estrito. Então, em um sentido muito real, OO é simplesmente disciplina imposta atransferência indireta de controle, ou seja, ponteiros para funções.
A programação estruturada é sobre como não usar o goto. OO é sobre como não usar ponteiros para funções. E a programação funcional também é sobre o que não fazer. Na programação funcional, não atribuímos variáveis, exceto nos casos mais rigorosamente controlados.
Portanto, no final, todas essas "tecnologias" de Programação estão na verdade restringindo disciplinas, em vez de possibilitar tecnologias. Eles nos dizem o que não fazer mais do que eles nos dizem o que a fazer. E isso significa que o desenvolvimento de software não cresceu nos últimos 40 anos. Pelo contrário, encolheu. Torna-se cada vez mais constrangido à medida que aprendemos todas as coisas que não devemos fazer.
Aprender o que não fazer é bom; mas aqui está a pergunta perturbadora: que coisas novas aprendemos a fazer?
fonte
Existem três maneiras básicas de programar um computador:
goto
s, como nos antigos intérpretes do BASIC ou na linguagem assembly. Poucas pessoas programam mais dessa maneira.Na minha opinião, a programação orientada a objetos é algo diferente. É sobre como organizar seu programa em uma escala maior. Ele não substitui ou obsoleta nenhum dos três paradigmas que mencionei acima - em um corpo de método, você ainda precisa escolher um dos três paradigmas da lista para escrever.
fonte
É tudo sobre como você antecipa a mudança.
Ambos os conceitos se prestam à reutilização, mas o OOP abre as portas para mudanças mais fáceis. OOP tem toda a capacidade de reutilização da programação estrutural, mas você também pode usá-lo para criar novas funcionalidades com menos esforço.
Você poderia dizer que OOP herda toda a funcionalidade da Programação Estrutural com a funcionalidade adicional de herança! :-D
fonte
Os conceitos são ortogonais. A programação estruturada trata da estruturação do código dentro de procedimentos / funções / métodos. É perfeitamente possível (e desejável) seguir os princípios da programação estruturada dentro dos métodos de classe ao fazer OOP.
fonte
Essa é uma espécie de expressão subjetiva - programação estruturada e POO são estilos de solução de problemas, e um nem sempre é melhor que o outro. Escrever uma biblioteca de métodos numéricos faz bastante sentido se feito em um estilo estruturado, no qual você está executando transformações nos dados de entrada. Um agente simples conduzido por uma máquina de estado, no entanto, pode ser facilmente expresso como uma classe independente em Java ou C ++. OOP pode ser uma maneira natural de expressar contêineres de armazenamento para estruturas de dados.
Falar sobre ocultação de informações e modularidade é uma boa maneira de motivar naturalmente a OOP como um estilo.
Uma abordagem interessante sobre esse assunto foi escrita por Steve Yegge - de certa forma, uma das melhores descrições das diferenças de abordagem entre os dois estilos.
fonte
OOP é mais fácil de entender quando você cria um modelo de negócios. Quando você pensa em elementos de aplicação, usa alguns OBJETOS e RELAÇÕES entre eles, por exemplo, o livro possui Autor (es), Título, ISBN. Livro é para deixar entrar na Biblioteca e pode ser emprestado pelo Estudante. A programação estrutural reforça o pensamento sobre processos específicos, implementações não abstraídas.
OOP é projetado para alterações fáceis. Mudança no programa estrutural é possível, mas deve ser descrita por código. A mudança no programa OO pode ser descrita pela mudança abstrata do modelo.
fonte
Escopo Variável:
Eu acho que um princípio das linguagens para garantir uma boa programação é restringir o escopo das variáveis. Em linguagens estruturadas como C, o escopo é principalmente de dois tipos -
Todos sabemos que o escopo global é prejudicial. Mas às vezes os escopos locais não são suficientes para executar o programa. Evitar escopos globais, então, tende a um uso mais amplo de ponteiros, o que permite o uso de variáveis fora do escopo. Mas ponteiros são difíceis de entender e usar.
As linguagens OOP como C ++ adicionam um novo tipo de escopo - escopo de Classe / Objeto através do encapsulamento. Esse escopo é aprimorado ainda mais pelas variações privadas / públicas. E isso resolve muitos problemas de escopo variável. Os escopos são mais definidos no OOP. E ponteiros são menos necessários.
Este é um dos grandes recursos do OOP.
fonte