Pequeno Dicionário da Reusabilidade em Software
Componente:
Um componente é um pedaço reutilizável de software. É utilizado de forma genérica e significa desde uma simples classe até um subsistema.
Teoricamente, um componente:

Framework:
Um framework é um conjunto de componentes de software que provêem uma arquitetura e estrutura básica para o desenvolvimento de uma aplicação. É uma aplicação semi-pronta que deve ser extendida e personalizada.
Recentemente, têm se utilizado a palavra framework para designar qualquer conjunto de bibliotecas, se perdendo seu sentido real.
Bilbioteca(Libraries):
Subprograma ou coleção de subprogramas reutilizadas em aplicações. Contêm implementações de rotinas úteis que podem ser reutilizadas em outras aplicações.
Container:
Gerencia o ciclo de vida de componentes e provê serviços a estes.
API:
Interface exposta por um componente.
Camada Lógica (Layer):
Separação de componentes por responsabilidades.
Camada Física (Tier):
Separação de Camadas Lógicas por vários nós (máquinas).
Um componente é um pedaço reutilizável de software. É utilizado de forma genérica e significa desde uma simples classe até um subsistema.
Teoricamente, um componente:
- Tem múltiplo-uso, é criado para ser reutilizável
- Independente do contexto: Não depende das suas aplicações clientes
- Pode formar compoentnes maiores se agrupado com outros componentes
- Encapsulado, provendo uma interface para acesso á suas funcionalidades
- Instalado e desenvolvido independentemente da aplicação cliente
- Implementação substituível desde que mantida a interface exposta pelo componente

O componente FooBar expõe interfaces para que seus clientes utilizem suas funcioonalidades. Se amanhã eu resolver utilizar uma outra implementação, chamada BarBar, eu posso simplesmente substituir FooBar, desde que BarBar implemente suas interfaces (GetStuff e AddStuff).
Framework:
Um framework é um conjunto de componentes de software que provêem uma arquitetura e estrutura básica para o desenvolvimento de uma aplicação. É uma aplicação semi-pronta que deve ser extendida e personalizada.
Recentemente, têm se utilizado a palavra framework para designar qualquer conjunto de bibliotecas, se perdendo seu sentido real.
Bilbioteca(Libraries):
Subprograma ou coleção de subprogramas reutilizadas em aplicações. Contêm implementações de rotinas úteis que podem ser reutilizadas em outras aplicações.
Container:
Gerencia o ciclo de vida de componentes e provê serviços a estes.
API:
Interface exposta por um componente.
Camada Lógica (Layer):
Separação de componentes por responsabilidades.
Camada Física (Tier):
Separação de Camadas Lógicas por vários nós (máquinas).
