As definições falam como se framework e API fossem “quase” a mesma coisa: bibliotecas de classes e métodos. Quais as diferenças? Alguém pode mostrar exemplos?
Aproveitando, também mostrar um exemplo simples de Design Patterns?
Ambos são duas bibliotecas que provem uma interface.
[quote]They are both libraries that provide an interface (a set of function and data-types or a set of classes and templates) for the programmer to write software for a specific platform or an application.
Usually APIs provide constants, data-types (such as structures or typedefs) and functions to the programmer. The Win32 API for instance provides functions that allow a programmer to communicate with the Windows operating system.
Frameworks are bigger and usually wrap around APIs and encapsulate their functionality into classes. The Windows-version of the Qt framework for instance wraps the Win32 API. Or the .NET framework which wraps the entire Windows API into classes.
Bottom line, they’re both libraries. The APIs provides a low-level interface while the Frameworks provide a higher-level interface.[/quote]
Entenda que um Framework é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica.
Já uma API é um conjunto específico de normas e especificações que um programa de software pode seguir para acessar e fazer uso dos serviços e recursos fornecidos por um outro programa de software que implementa a API.
A função da API é apenas interagir a comunicação entre diversos sofwares, enquanto que o Framework fornece uma interface gráfica para interagir com usuário e utiliza a API para interagir este usuário com o Sistema Operacional.
Um belo exemplo está no próprio JAVA. onde o JVM (Java Virtual Machine) que cria uma camada de abstração dentro de cada sistema operacional específico, sendo esta abstração uma API que interpreta e executa os códigos java das bibliotecas AWT e SWING. e agora também disponìvel a biblioteca Nimbus que possui uma interface gráfica muito, mas muito agradável.
Todas estas bibliotecas AWT, Swing e Nimbus, formam um framework que interage com a API do JVM e esta com o sistema operacional
Frameworks disponíveis para web: Spring, Java Server Faces e muitos outros.