Console.Write("Hello World!");
Imagine conseguir passar para um mundo abstrato (virtual) coisas que existem no mundo real de uma forma extremamente fiel, contendo vários detalhes, características e comportamentos de alguma coisa de nosso mundo, apenas escrevendo linhas de código.
Imagine você escrever uma rotina complexa e poder reutilizá-la em seu código quantas vezes você necessitar.
Imagine criar o modelo de um programa ou um software que não precise mostrar ao usuário a sua complexidade e apenas execute e exiba o que você achar necessário, limitando o acesso do código.
Imagine também você poder dividir um código que inicialmente seria grande e extenso em várias "repartições" menores e poder acoplá-las numa espécie de biblioteca onde você poderá utilizá-la em outras aplicações.
Não fique apenas imaginando: Tudo isso e mais ainda é possível através da programação orientada a objetos (POO).
O que é?
A programação orientada a objetos é um paradigma de programação (um estilo de programar) que consiste em focar o seu código em objetos que possuirão comportamentos e características, deixando seu código mais compacto, organizado e produtivo, te possibilitando também a trazer objetos que existem no mundo real, para o mundo virtual de uma forma bastante detalhada.
A POO está presente em diversas linguagens de programação, tais como: C#, C++, Java, VB.NET, Ruby, PHP, Eiffel, Python, dentro outras.
Atualmente no mercado de trabalho é preferível o desenvolvimento de programas utilizando os conceitos de POO por conta de suas vantagens já apresentadas acima.
Se você está realmente querendo aprender a programar em C# é muito importante que você entenda como funciona esse paradigma e como utilizá-lo, pois a POO está fortemente presente em C#.
Os pilares da POO:
Como um meio de programação, a POO consiste em critérios que devem ser requeridos a uma determinada linguagem para que ela seja considerada orientada a objetos. Esses critérios são chamados também de "Pilares da orientação a objetos".
Vamos ver cada um desses conceitos em específico em aulas separadas, mas posso resumir nesta postagem o que cada critério implica:
Abstração - Consiste em a linguagem ter a capacidade de abstrair seus 'detalhes'.
Pense por exemplo nos semáforos: Você sabe para o que eles funcionam, que seria sinalizar quando o carro deve andar ou parar através de suas cores distintas, mas você realmente sabe como eles funcionam? Em quais momentos eles devem mudar de cor? O que os faz mudarem de cor? Como são conectados e sincronizados?
Você pode até imaginar como eles funcionam, mas saber realmente COMO acho bem improvável.
O modo como um semáforo funciona está abstraído do mundo exterior, as pessoas não precisam saber como ele funciona para saber usá-lo ou para o que servem.
Quando você está programando em C# você utiliza diversas vezes o comando: "Console.WriteLine()", você sabe onde usá-lo e para o que usá-lo, mas você realmente sabe como ele tem a capacidade de imprimir valores na tela? Você sabe como este comando faz isso? Creio que a resposta seja não, correto? Pois então! Os detalhes da programação do WriteLine estão abstraídos do exterior, o usuário não precisa saber como ele foi feito, apenas precisa saber o que faz e como utilizá-lo.
Polimorfismo - A capacidade do código ser desenvolvido para que possa ser utilizado de diversas maneiras diferentes, porém não deixando sua essência.
Imagine as folhas de papel: Elas podem ser utilizadas para serem escritas, dobradas (para criar esculturas ou diminuir de tamanho), podem servir de decoração, para limpar algo, se abanar, e etc.
Note que a sua finalidade é variável, mas algumas propriedades são similares e que o caracterizam como papel, tais como ter um tamanho, ou ser capaz de se deixar dobrar, tipo de material, e por aí vai.
Porém, existem propriedades variáveis que vão depender exatamente da finalidade daquele papel, como cor, grossura, tamanho, e etc.
Todos esse papeis possuem finalidades diferentes, mas todos ainda são de fato PAPEIS. E este é o conceito do polimorfismo em programação.
Herança - A herança no mundo da programação ocorre como no mundo real: Um filho por exemplo, pode herdar características da mãe, ou ainda num âmbito mais complexo, o ser humano herda características da classe dos mamíferos, bem como os cachorros, por exemplo.
Veja que o ser humano e os cachorros são totalmente diferentes em diversos aspectos como comportamentos, aparência, raciocínio, estilo de vida e etc. Mas apesar disso, ambos herdam semelhanças, como o modo de reprodução, a capacidade da amamentação, e etc.
Seria ainda mais interessante de pensar que os mamíferos herdam características da classe "Animal", ou seja, andar, respirar, correr, nadar, comer, dentro outros.
Perceba que qualquer animal é capaz de respirar (característica herdada de "Animais") mas dependendo de sua subclasse, o jeito como se respira é diferente, como vemos entre peixes e mamíferos, por exemplo.
Em programação, a herança é útil para que possamos escrever um código-pai (que chamaremos de super classe em outras aulas) que possui "comandos essenciais" de base, para que suas classes-filhas sejam construídas. Dessa forma, muitas vezes não se faz necessário rescrever um código completo, basta realizar uma herança que o código poderá ser reutilizado e ainda implementado de outras formas.
O assunto de herança será algo bem extenso durante nossas aulas sobre POO, então até lá você terá vários exemplos sobre este critério.
Encapsulamento - Se você analisar a palavra, "encapsular" verá que é o ato de proteger/esconder alguma coisa.
Referente à POO, encapsular um código é limitá-lo a quem ou o que pode acessá-lo, e este conceito está muito ligado com o conceito de abstração, visto mais acima.
Através dos modificadores de acesso e métodos especiais de acessibilidade, é possível encapsular determinadas informações dentro de seu programa.
Quando formos falar de tratamento de erros e segurança do código, você vai poder entender melhor a finalidade deste conceito.
E então...
Esta postagem foi criada com a finalidade de explicar rapidamente os conceitos básicos da POO, e o que de fato isso vem a ser. Este assunto é algo extenso e será tratado com detalhes ao longo de nossas aulas, tendo como foco cada um dos conceitos apresentados acima, contendo exemplos práticos de suas aplicações e relevância.
Imagine você escrever uma rotina complexa e poder reutilizá-la em seu código quantas vezes você necessitar.
Imagine criar o modelo de um programa ou um software que não precise mostrar ao usuário a sua complexidade e apenas execute e exiba o que você achar necessário, limitando o acesso do código.
Imagine também você poder dividir um código que inicialmente seria grande e extenso em várias "repartições" menores e poder acoplá-las numa espécie de biblioteca onde você poderá utilizá-la em outras aplicações.
Não fique apenas imaginando: Tudo isso e mais ainda é possível através da programação orientada a objetos (POO).
O que é?
A programação orientada a objetos é um paradigma de programação (um estilo de programar) que consiste em focar o seu código em objetos que possuirão comportamentos e características, deixando seu código mais compacto, organizado e produtivo, te possibilitando também a trazer objetos que existem no mundo real, para o mundo virtual de uma forma bastante detalhada.
A POO está presente em diversas linguagens de programação, tais como: C#, C++, Java, VB.NET, Ruby, PHP, Eiffel, Python, dentro outras.
Atualmente no mercado de trabalho é preferível o desenvolvimento de programas utilizando os conceitos de POO por conta de suas vantagens já apresentadas acima.
Se você está realmente querendo aprender a programar em C# é muito importante que você entenda como funciona esse paradigma e como utilizá-lo, pois a POO está fortemente presente em C#.
Os pilares da POO:
Como um meio de programação, a POO consiste em critérios que devem ser requeridos a uma determinada linguagem para que ela seja considerada orientada a objetos. Esses critérios são chamados também de "Pilares da orientação a objetos".
Vamos ver cada um desses conceitos em específico em aulas separadas, mas posso resumir nesta postagem o que cada critério implica:
Abstração - Consiste em a linguagem ter a capacidade de abstrair seus 'detalhes'.
Pense por exemplo nos semáforos: Você sabe para o que eles funcionam, que seria sinalizar quando o carro deve andar ou parar através de suas cores distintas, mas você realmente sabe como eles funcionam? Em quais momentos eles devem mudar de cor? O que os faz mudarem de cor? Como são conectados e sincronizados?
Você pode até imaginar como eles funcionam, mas saber realmente COMO acho bem improvável.
O modo como um semáforo funciona está abstraído do mundo exterior, as pessoas não precisam saber como ele funciona para saber usá-lo ou para o que servem.
Quando você está programando em C# você utiliza diversas vezes o comando: "Console.WriteLine()", você sabe onde usá-lo e para o que usá-lo, mas você realmente sabe como ele tem a capacidade de imprimir valores na tela? Você sabe como este comando faz isso? Creio que a resposta seja não, correto? Pois então! Os detalhes da programação do WriteLine estão abstraídos do exterior, o usuário não precisa saber como ele foi feito, apenas precisa saber o que faz e como utilizá-lo.
Polimorfismo - A capacidade do código ser desenvolvido para que possa ser utilizado de diversas maneiras diferentes, porém não deixando sua essência.
Imagine as folhas de papel: Elas podem ser utilizadas para serem escritas, dobradas (para criar esculturas ou diminuir de tamanho), podem servir de decoração, para limpar algo, se abanar, e etc.
Note que a sua finalidade é variável, mas algumas propriedades são similares e que o caracterizam como papel, tais como ter um tamanho, ou ser capaz de se deixar dobrar, tipo de material, e por aí vai.
Porém, existem propriedades variáveis que vão depender exatamente da finalidade daquele papel, como cor, grossura, tamanho, e etc.
Todos esse papeis possuem finalidades diferentes, mas todos ainda são de fato PAPEIS. E este é o conceito do polimorfismo em programação.
Herança - A herança no mundo da programação ocorre como no mundo real: Um filho por exemplo, pode herdar características da mãe, ou ainda num âmbito mais complexo, o ser humano herda características da classe dos mamíferos, bem como os cachorros, por exemplo.
Veja que o ser humano e os cachorros são totalmente diferentes em diversos aspectos como comportamentos, aparência, raciocínio, estilo de vida e etc. Mas apesar disso, ambos herdam semelhanças, como o modo de reprodução, a capacidade da amamentação, e etc.
Seria ainda mais interessante de pensar que os mamíferos herdam características da classe "Animal", ou seja, andar, respirar, correr, nadar, comer, dentro outros.
Perceba que qualquer animal é capaz de respirar (característica herdada de "Animais") mas dependendo de sua subclasse, o jeito como se respira é diferente, como vemos entre peixes e mamíferos, por exemplo.
Em programação, a herança é útil para que possamos escrever um código-pai (que chamaremos de super classe em outras aulas) que possui "comandos essenciais" de base, para que suas classes-filhas sejam construídas. Dessa forma, muitas vezes não se faz necessário rescrever um código completo, basta realizar uma herança que o código poderá ser reutilizado e ainda implementado de outras formas.
O assunto de herança será algo bem extenso durante nossas aulas sobre POO, então até lá você terá vários exemplos sobre este critério.
Encapsulamento - Se você analisar a palavra, "encapsular" verá que é o ato de proteger/esconder alguma coisa.
Referente à POO, encapsular um código é limitá-lo a quem ou o que pode acessá-lo, e este conceito está muito ligado com o conceito de abstração, visto mais acima.
Através dos modificadores de acesso e métodos especiais de acessibilidade, é possível encapsular determinadas informações dentro de seu programa.
Quando formos falar de tratamento de erros e segurança do código, você vai poder entender melhor a finalidade deste conceito.
E então...
Esta postagem foi criada com a finalidade de explicar rapidamente os conceitos básicos da POO, e o que de fato isso vem a ser. Este assunto é algo extenso e será tratado com detalhes ao longo de nossas aulas, tendo como foco cada um dos conceitos apresentados acima, contendo exemplos práticos de suas aplicações e relevância.