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?