# conceitos_fundamentais = recursos_engenharia e eng_software 2023MAR22-LH /***********************************************************/ 1. Conceitos Fundamentais e Exemplos - Microserviços Definição: Estrutura uma aplicação como uma coleção de serviços pequenos, independentes e modulares, que se comunicam através de APIs. Exemplo: Um aplicativo de e-commerce onde diferentes serviços gerenciam usuários, pedidos, pagamentos e catálogo de produtos, cada um operando de forma autônoma. - Monolitos Definição: Uma única base de código e estrutura de dados unifica todos os componentes do software. Exemplo: Um sistema de gerenciamento de biblioteca onde o front-end, back-end e o banco de dados são parte de uma única aplicação executável. - C/C++ C: Conhecida pela eficiência e controle próximo ao hardware, usada em sistemas operacionais e software de sistema. C++: Adiciona suporte à programação orientada a objetos, útil para aplicações de software de grande escala. Exemplo: Sistema operacional Linux (C), jogos de computador de alta performance (C++). - Java Definição: Uma linguagem de programação orientada a objetos, conhecida por sua portabilidade entre plataformas diferentes. Exemplo: Aplicativos Android são desenvolvidos majoritariamente em Java. - Git Definição: Um sistema de controle de versão distribuído para o gerenciamento de código-fonte. Exemplo: Desenvolvedores colaborando em um projeto de software no GitHub, usando Git para versionar suas contribuições. - Arquitetura de Software Definição: Estrutura de sistemas de software, incluindo componentes, propriedades visíveis externamente e relações entre eles. Exemplo: Arquitetura cliente-servidor em uma aplicação web, onde o cliente (navegador) solicita recursos ao servidor que responde com dados ou páginas web. - Design Pattern (Padrões de Design) Definição: Soluções generalizadas para problemas comuns de design de software. Exemplo: Singleton Pattern, garantindo que uma classe tenha apenas uma instância e fornecendo um ponto de acesso global a essa instância. 2. Referências Bibliográficas Detalhadas - "C Programming Language" por Brian W. Kernighan e Dennis M. Ritchie: Este livro é a referência clássica e fundamental para aprender a linguagem C. - "The C++ Programming Language" por Bjarne Stroustrup: Escrito pelo criador da linguagem, é o guia definitivo para C++. - "The Rust Programming Language" por Steve Klabnik e Carol Nichols: Introdução abrangente à linguagem de programação Rust. - "Python Crash Course" por Eric Matthes: Um livro prático e orientado a projetos para iniciantes em Python. - "MATLAB for Engineers" por Holly Moore: Uma introdução ao MATLAB com foco em suas aplicações em engenharia. - "Design Patterns: Elements of Reusable Object-Oriented Software" por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides: Introduz os padrões de design mais fundamentais em software orientado a objetos. - "Software Engineering" por Ian Sommerville: Um texto completo que abrange uma ampla gama de tópicos em engenharia de software, da análise de requisitos ao design de sistemas. - "Continuous Delivery" por Jez Humble e David Farley: Explora práticas de CI/CD para automação de builds, testes e deploy.