Aplicações modernas possuem natureza dinâmica e necessitam de suporte para se adaptarem a novas demandas funcionais e não-funcionais. Novas demandas funcionais são criadas por usuários das aplicações, que precisam funções não previstas originalmente ou necessitam alterar funções existentes. Durante o ciclo de vida das aplicações, podem também surgir requisitos não-funcionais que, em geral, não estão associados diretamente com a aplicação. Modelos mais usuais para o desenvolvimento de software não oferecem as facilidades necessárias para a produção de aplicações que se adaptem dinamicamente a essas demandas. Portanto, uma abordagem que facilite a concepção dessas aplicações se faz necessária. Apresentamos neste artigo a abordagem R-RIO, que estende o conceito tradicional de configuração, permitindo que se descreva a arquitetura das aplicações a partir de componentes e suas interações e, adicionalmente, seus aspectos não-funcionais como a distribuição, coordenação e protocolos de comunicação. A arquitetura de uma aplicação é descrita com o uso de CBabel, a linguagem de configuração de R-RIO. A partir da descrição da arquitetura um middleware, chamado configurador, pode criar instâncias de seus componentes e iniciar a execução da aplicação. O configurador também oferece suporte para adaptação das aplicações que necessitam reagir à mudanças de requisitos ou de condições de operação, inclusive durante a fase de funcionamento. O exemplo do Jogo da Velha (TicTacToe) é utilizado para ilustrar a concepção de uma aplicação com um protocolo de interação complexo utilizando-se R-RIO e para permitir uma comparação com outras abordagens.