Tutoriais de programação - página 2

 

Programação Orientada a Objetos em 7 minutos | mosh



Programação Orientada a Objetos em 7 minutos | mosh

A programação orientada a objetos (OOP) revolucionou a maneira como abordamos o desenvolvimento de software, introduzindo quatro conceitos principais: encapsulamento, abstração, herança e polimorfismo. Esses conceitos fornecem uma estrutura poderosa e organizada para projetar e implementar sistemas complexos.

O encapsulamento é a prática de agrupar variáveis e funções relacionadas em uma unidade chamada objeto. Ao encapsular os dados e os métodos que operam nesses dados dentro de um objeto, criamos uma entidade independente com limites bem definidos. Por exemplo, um objeto carro pode ter propriedades como marca, modelo e cor, bem como métodos como iniciar, parar e mover. Esse encapsulamento nos permite manipular e interagir com o objeto carro como uma única entidade, ocultando os detalhes internos da implementação do mundo externo. O encapsulamento não apenas melhora a organização do código, mas também aumenta a capacidade de reutilização e manutenção do código.

Abstração é o processo de ocultar detalhes complexos de implementação e expor apenas recursos ou interfaces essenciais. Ele nos permite criar representações simplificadas de objetos ou conceitos do mundo real. Assim como um DVD player abstrai sua intrincada lógica interna por trás de alguns botões, os objetos em OOP podem ocultar seu funcionamento interno enquanto fornecem uma interface clara e concisa. Ao abstrair a complexidade, podemos reduzir a carga cognitiva e tornar nosso código mais compreensível. Além disso, a abstração atua como um escudo protetor, isolando o impacto das alterações em um objeto e evitando consequências não intencionais em outras partes da base de código.

Herança é um mecanismo que permite que objetos herdem propriedades e comportamentos de outros objetos. Com a herança, podemos criar uma hierarquia de objetos, onde objetos mais especializados herdam características de objetos mais generalizados. Essa hierarquia promove a reutilização de código, pois atributos e métodos comuns podem ser definidos em um objeto base e herdados por suas subclasses. Por exemplo, no caso de elementos HTML, como caixas de texto, listas suspensas e caixas de seleção, todos eles compartilham propriedades comuns como HTML oculto e interno, bem como métodos como clique e foco. Em vez de duplicar essas propriedades e métodos em cada elemento HTML, podemos defini-los uma vez em um objeto genérico chamado elemento HTML e fazer com que os elementos específicos sejam herdados dele. A herança elimina a redundância, melhora a capacidade de manutenção do código e permite arquiteturas de código flexíveis e extensíveis.

Polimorfismo, derivado das palavras gregas "poli" (muitos) e "morfo" (forma), refere-se à capacidade dos objetos de assumir múltiplas formas ou comportamentos. Em OOP, o polimorfismo permite que objetos de tipos diferentes sejam tratados como objetos de um tipo comum. Esse conceito é alcançado por meio da substituição e sobrecarga de métodos. A substituição de método permite que uma subclasse forneça sua própria implementação de um método herdado de sua superclasse. Por exemplo, diferentes elementos HTML podem precisar ser renderizados em uma página, mas cada elemento tem seu comportamento de renderização exclusivo. Ao implementar um método de renderização em cada objeto, podemos obter polimorfismo e simplificar o código, eliminando longas instruções if-else ou switch-case. A sobrecarga de métodos, por outro lado, permite que vários métodos com o mesmo nome, mas com diferentes listas de parâmetros, coexistam em uma classe. O polimorfismo permite flexibilidade de código, melhora a legibilidade do código e promove o princípio de "programação para uma interface" em vez de uma implementação específica.

Aproveitando o encapsulamento, a abstração, a herança e o polimorfismo, a programação orientada a objetos fornece uma abordagem estruturada para o desenvolvimento de software. Ele traz inúmeros benefícios, como organização de código, capacidade de reutilização, capacidade de manutenção, modularidade e extensibilidade. Compreender e aplicar efetivamente esses conceitos básicos capacita os desenvolvedores a criar sistemas complexos que são flexíveis, escaláveis e mais fáceis de compreender e manter ao longo do tempo.

Object-oriented Programming in 7 minutes | Mosh
Object-oriented Programming in 7 minutes | Mosh
  • 2018.03.29
  • www.youtube.com
Get the COMPLETE COURSE: http://bit.ly/2keDCna4 pillars of object-oriented programming: encapsulation, abstraction, inheritance and polymorphism. Subscribe f...
 

Introdução à Programação Orientada a Objetos - Curso Intensivo


Introdução à Programação Orientada a Objetos - Curso Intensivo

Bem-vindo a uma introdução à programação orientada a objetos. Neste curso, exploraremos o conceito de programação orientada a objetos e seus quatro princípios principais. Presume-se conhecimento prévio de programação, mas se você for iniciante em programação, recomendamos assistir ao nosso vídeo de introdução à programação, cujo link está na descrição.

A programação orientada a objetos nos permite agrupar variáveis de tipos semelhantes, facilitando o gerenciamento de programas complexos. No passado, tipos de dados primitivos como byte, int, float, double, boolean e char eram usados para armazenar valores simples simples. No entanto, à medida que os programas se tornavam mais complexos, os programadores precisavam de uma maneira de agrupar as variáveis relacionadas.

Isso levou ao desenvolvimento de estruturas em C, que permitiram o agrupamento de dados de diferentes tipos. As estruturas eram uma melhoria em relação aos arrays, pois permitiam o armazenamento de diversos dados. No entanto, as estruturas careciam da capacidade de definir funções dentro delas.

Com o advento da programação orientada a objetos, os objetos foram introduzidos. Um objeto é uma instância de uma classe, que serve como modelo para objetos. Os objetos podem armazenar dados e definir funções. A classe define os atributos e comportamentos comuns dos objetos, enquanto os objetos representam instâncias específicas com seus próprios dados exclusivos.

O encapsulamento é um dos principais princípios da programação orientada a objetos. Envolve agrupar dados e métodos dentro de uma classe e ocultá-los do acesso externo. Outras classes podem interagir com os atributos de um objeto somente por meio dos métodos da classe, como os métodos getter e setter. O encapsulamento ajuda a manter o controle dos dados e reduz a complexidade do programa impedindo o acesso direto aos atributos internos.

A abstração é outro princípio que se concentra em mostrar detalhes essenciais enquanto esconde complexidades desnecessárias. Na programação, isso significa definir interfaces para classes que permitem a comunicação entre diferentes seções de código. A implementação exata dos métodos está oculta dentro da classe e as classes externas só interagem com a interface definida. Essa abordagem permite a programação modular e facilita a colaboração entre vários programadores.

Nas próximas seções, discutiremos os princípios remanescentes da programação orientada a objetos: herança e polimorfismo. Esses princípios aprimoram ainda mais a flexibilidade e a reutilização do código na programação orientada a objetos.

Isso é tudo para a introdução à programação orientada a objetos. Vamos passar para a próxima seção e explorar o encapsulamento com mais detalhes.

  • 00:00:00 Nesta palestra, exploraremos o que é a programação orientada a objetos e como ela funciona. Discutiremos como funcionam os tipos de dados primitivos, como bytes, ints, floats, doubles e booleanos, e como as estruturas podem ajudar a organizar e armazenar dados com mais eficiência. Também exploraremos como os objetos são criados e como eles se relacionam entre si.

  • 00:05:00 A programação orientada a objetos fornece uma maneira de agrupar dados e funções relacionados, permitindo uma programação complexa sem a necessidade de codificar tudo separadamente. Neste Crash Course, veremos o primeiro dos quatro princípios principais da POO - encapsulamento. Veremos como isso é usado no contexto do exemplo de xadrez da seção anterior e como facilita o rastreamento e o gerenciamento de atributos relacionados.

  • 00:10:00 Abstração é a ideia de ocultar detalhes essenciais dos usuários de uma classe, enquanto encapsulamento é a prática de ocultar dados de outras classes. Esses conceitos são importantes ao trabalhar em programas grandes e complexos, pois pode ser difícil focar no quadro geral durante a programação. Esta seção discutirá o quarto princípio da programação orientada a objetos, a abstração.

  • 00:15:00 Na programação orientada a objetos, uma interface é um conjunto predeterminado de métodos que duas classes podem usar para se comunicar umas com as outras. Isso evita que diferentes partes do programa fiquem completamente acopladas e ajuda a evitar erros na comunicação. a herança é o princípio que permite a uma classe derivar outras classes dela e, neste vídeo, veremos um exemplo.

  • 00:20:00 Neste curso intensivo sobre programação orientada a objetos, discutimos os três principais modificadores de acesso: público, privado e protegido. Também discutimos o polimorfismo, que descreve métodos que podem assumir várias formas. Por fim, discutimos o princípio da herança, que descreve como as classes podem se relacionar umas com as outras.

  • 00:25:00 Polimorfismo é a capacidade de um método assumir diferentes formas dependendo da hierarquia de classes a partir da qual é chamado. Isso funciona de forma dinâmica e estática. A sobrecarga permite que métodos com o mesmo nome tenham efeitos diferentes, mas é potencialmente complicado de implementar.

  • 00:30:00 Este vídeo apresenta os fundamentos da Programação Orientada a Objetos (OOP). Se você estiver interessado em aprender mais sobre POO, certifique-se de conferir outros vídeos da série Crash Course.
Intro to Object Oriented Programming - Crash Course
Intro to Object Oriented Programming - Crash Course
  • 2020.09.30
  • www.youtube.com
Learn the basics of object-oriented programming all in one video.✏️ Course created by Steven from NullPointer Exception. Check out their channel: https://www...
 

C++ OOP - Introdução a classes e objetos para iniciantes



C++ OOP - Introdução a classes e objetos para iniciantes

Bem vindos ao meu canal, pessoal! Sou Saldina e crio vídeos relacionados a TI e programação. Se você estiver interessado nesses tópicos, considere se inscrever no meu canal e dar um joinha neste vídeo.

Neste vídeo, quero mergulhar no mundo da programação orientada a objetos (OOP). Então, o que exatamente é programação orientada a objetos? OOP nos permite representar objetos da vida real na programação, completos com seus atributos e comportamentos.

Dois conceitos fundamentais em OOP são classes e objetos. Vamos entender a diferença entre os dois. Uma classe serve como modelo ou projeto, definindo a estrutura e o comportamento de um objeto. Por outro lado, um objeto é uma instância de uma classe. Para ilustrar isso, considere uma classe que representa frutas e os objetos dessa classe podem ser uma maçã, banana ou pêssego. Da mesma forma, uma classe que representa carros teria objetos como Volvo, Ford ou BMW. Cada classe tem atributos (propriedades) como nome, preço, velocidade máxima e cor, bem como comportamentos (métodos) como dirigir, frear e mudar de cor.

Agora, vamos criar uma classe de exemplo chamada "YouTubeChannel". Para criar uma classe, usamos a palavra-chave "class" seguida do nome da classe entre chaves. Também precisamos tornar os membros da classe acessíveis fora da classe usando o modificador de acesso "público". Em nossa classe YouTubeChannel, definiremos atributos como o nome do canal, nome do proprietário, contagem de inscritos e uma lista de títulos de vídeos publicados. Para representar esses atributos, atribuímos valores a eles. Criamos um objeto da classe YouTubeChannel e acessamos suas propriedades usando a notação de ponto. Por exemplo, podemos atribuir o nome do canal do YouTube como "CodeBeauty" e o nome do proprietário como "Saldina".

Também podemos definir a contagem de inscritos para 1800 e adicionar três títulos de vídeos publicados à lista. Para exibir as informações armazenadas nessas propriedades, usamos "cout" para imprimi-las. Para a lista de títulos de vídeos publicados, que é uma coleção, podemos iterar usando um loop e imprimir cada título de vídeo. Ao executar o programa, podemos ver a saída exibindo os detalhes do canal do YouTube: o nome do canal, nome do proprietário, contagem de inscritos e a lista de títulos de vídeos publicados.

Em vídeos futuros, abordaremos tópicos como construtores e métodos de classe, que fornecem abordagens mais simplificadas para trabalhar com classes e objetos.

Espero que tenham gostado deste vídeo! Se você achou útil, dê um joinha e considere se inscrever no meu canal clicando no ícone de sino. Fique ligado para mais conteúdo emocionante. Vejo você no próximo vídeo. Tchau!

C++ OOP - Introduction to classes and objects for beginners
C++ OOP - Introduction to classes and objects for beginners
  • 2020.08.02
  • www.youtube.com
Object-oriented programming is a programming paradigm that is based on the concept of objects from the real world, and it is used to represent those real wor...
 

C++ OOP (2020) - O que são construtores e métodos de classe? Como usá-los?


C++ OOP (2020) - O que são construtores e métodos de classe? Como usá-los?

Olá a todos, sejam bem vindos ao meu canal! Sou Saldina, e neste canal crio vídeos relacionados a programação. Se isso lhe interessa, considere se inscrever e dar um joinha neste vídeo. Neste vídeo, quero falar sobre construtores e métodos de classe.

Em um tutorial anterior, escrevemos um código para uma classe chamada YouTubeChannel. Ele tem quatro propriedades públicas: nome, nome do proprietário, contagem de inscritos e uma lista de títulos de vídeos publicados. Criamos um objeto dessa classe e atribuímos valores às suas propriedades. Agora, vamos resolver um problema com essa abordagem. Se quisermos criar outro objeto de canal do YouTube, teremos que copiar e colar o código e fazer as alterações necessárias. Isso viola o princípio "Não se repita". Para resolver esse problema, podemos usar construtores e métodos de classe.

Um construtor é um método especial que é invocado quando um objeto é criado. Tem o mesmo nome da classe e não tem tipo de retorno. Vamos criar um construtor para a classe YouTubeChannel. Ele receberá dois parâmetros: nome e nome do proprietário. Dentro do construtor, atribuiremos esses parâmetros às propriedades correspondentes. Depois de criar o construtor, podemos usá-lo para criar objetos passando os valores necessários. Isso elimina a necessidade de repetir o código para criar objetos. Também podemos usar métodos de classe para evitar a repetição de código para exibir informações sobre os canais.

Vamos criar um método de classe chamado getInfo que grava as informações do canal. Podemos mover o código para exibir as informações para esse método e usá-lo para ambos os objetos. Para invocar o método getInfo, podemos chamá-lo no objeto usando o nome do objeto seguido por um ponto e o nome do método. Dessa forma, podemos exibir as informações de ambos os canais sem duplicar o código.

Usando construtores e métodos de classe, obtemos um código mais limpo e eficiente. A função principal torna-se mais fácil de ler e manter. Os construtores lidam com a inicialização das propriedades do objeto, enquanto os métodos de classe encapsulam os comportamentos comuns da classe.

Espero que você tenha achado este vídeo útil. Se você gostou, dê um joinha e se inscreva no meu canal. Não se esqueça de clicar no ícone do sino para ficar atualizado. Vejo vocês no meu próximo vídeo. Tchau!

C++ OOP (2020) - What are constructors and class methods? How to use them?
C++ OOP (2020) - What are constructors and class methods? How to use them?
  • 2020.08.09
  • www.youtube.com
In this video, I'm explaining when, why, and how are constructors and class methods used.📚 Learn how to solve problems and build projects with these Free E-...
 

C++ OOP - O que é encapsulamento na programação?



C++ OOP - O que é encapsulamento na programação?

Oi pessoal! Eu sou Saldina e bem-vindo ao meu canal relacionado à programação. Se você estiver interessado em programação, considere se inscrever e dar um joinha neste vídeo. Neste vídeo, discutiremos o encapsulamento.

Primeiro, vamos revisar rapidamente o código de nossos vídeos anteriores. Temos uma classe YouTubeChannel com atributos públicos: nome, nome do proprietário, contagem de inscritos e uma lista de títulos de vídeos publicados. Também temos um construtor YouTubeChannel e um método getInfo.

Agora, vamos nos concentrar no encapsulamento. O princípio do encapsulamento afirma que as propriedades devem ser privadas e seus valores devem ser acessados e modificados por meio de métodos expostos pela classe. Isso garante uma manipulação de dados controlada e adequada. Para demonstrar a necessidade de encapsulamento, vamos apresentar um problema. Atualmente, podemos atribuir diretamente um valor à contagem de assinantes, que não é como os assinantes devem aumentar ou diminuir naturalmente. Em vez disso, devemos fornecer métodos como Subscribe e Unsubscribe para controlar essas alterações.

Para ocultar as propriedades dos usuários, vamos torná-las privadas. Ao alterar o modificador de acesso para privado, restringimos o acesso direto a essas propriedades. No entanto, isso gera erros, pois os membros privados agora estão inacessíveis fora da classe. Para permitir que os usuários modifiquem a contagem de assinantes, criamos dois métodos: Subscribe e Unsubscribe. O método de assinatura incrementa a contagem de assinantes, enquanto o método de cancelamento de assinatura a diminui. Ao usar esses métodos, os usuários podem interagir com a classe e seguir as regras definidas pelos métodos.

Encontramos um problema no método de cancelamento de inscrição. Atualmente permite que a contagem se torne negativa. Para corrigir isso, precisamos adicionar uma verificação que garanta que a contagem seja maior que zero antes de diminuí-la. Além disso, temos outra propriedade privada, títulos de vídeos publicados, que estão inacessíveis agora. Para fornecer acesso a essa propriedade, criaremos um método chamado publishVideo. Este método pega um parâmetro de string (o título do vídeo) e o adiciona à lista de títulos de vídeos publicados usando o método push_back.

Por fim, expusemos métodos que permitem aos usuários interagir com a classe e manipular as propriedades privadas. Para controlar ainda mais o acesso às propriedades de nome e nome do proprietário, podemos criar métodos getter e setter.

Para resumir o encapsulamento:

  • Torne as propriedades privadas para restringir o acesso direto.
  • Forneça métodos públicos para modificar as propriedades privadas.
  • Garanta a manipulação adequada dos dados seguindo as regras definidas nos métodos.

Se você tiver algum código implementando métodos getter e setter, sinta-se à vontade para compartilhá-lo na seção de comentários para revisão.

Se você gostou deste vídeo, dê um joinha, inscreva-se no meu canal e clique no ícone do sino para receber notificações de vídeos futuros. Obrigado por assistir, e vejo vocês no próximo vídeo! Tchau!

C++ OOP - What is encapsulation in programming?
C++ OOP - What is encapsulation in programming?
  • 2020.08.17
  • www.youtube.com
Encapsulation is one of the most important characteristics of Object-Oriented Programming. Encapsulation helps in data hiding and is used to prevent direct a...
 

C++ OOP - O que é herança na programação?



C++ OOP - O que é herança na programação?

Olá a todos, sou Saldina e crio vídeos relacionados à programação. Se você estiver interessado nisso, considere se inscrever no meu canal. Além disso, dê um joinha neste vídeo. Neste vídeo, quero discutir o encapsulamento.

Eu escrevi algum código em vídeos anteriores deste curso. Se você ainda não os viu, certifique-se de vê-los. Vou deixar os links na descrição do vídeo. Deixe-me examinar rapidamente o código para ajudá-lo a entendê-lo. Criei uma classe YouTubeChannel com quatro atributos públicos: nome, nome do proprietário, contagem de inscritos e uma lista de títulos de vídeos publicados. O construtor YouTubeChannel e o método getInfo também estão presentes. Você pode ver o código do construtor aqui.

Na função principal, criei um objeto da classe YouTubeChannel e atribuí valores para o nome e o nome do proprietário. Também adicionei três vídeos à lista de vídeos publicados. Por fim, imprimi as informações sobre o canal. Agora, vamos falar sobre encapsulamento. Este princípio sugere que essas propriedades devem ser privadas, não públicas. Os dados armazenados nessas propriedades só devem ser modificados por meio de métodos que você expõe ao usuário. Seguindo as regras desses métodos, o usuário pode alterar os valores das propriedades.

Vamos considerar um problema para entender por que precisamos do encapsulamento. E se eu definir a contagem de inscritos deste canal do YouTube para um milhão? Isso não deveria ser permitido. Se eu executar o código, você verá que o canal agora tem um milhão de inscritos. No entanto, ganhar assinantes exige naturalmente que os usuários invoquem os métodos de assinatura e cancelamento de assinatura. Ao usar esses métodos, a contagem de assinantes aumenta ou diminui. Para ocultar essas propriedades do usuário, as tornamos privadas em vez de públicas. Isso significa que eles só podem ser acessados dentro da própria classe. Para permitir que os usuários modifiquem a contagem de inscritos, criamos dois métodos: Subscribe e Unsubscribe. O método de assinatura incrementa a contagem de assinantes, enquanto o método de cancelamento de assinatura a diminui.

Para aumentar ou diminuir assinantes, agora temos que invocar esses métodos. Por exemplo, youtubeChannel.subscribe() é usado três vezes para simular três assinaturas. Se eu invocar youtubeChannel.unsubscribe() e, em seguida, chamar getInfo, você verá que há dois assinantes. Também encontramos um erro de tempo de compilação porque a propriedade de títulos de vídeo publicados agora é privada e inacessível. Para resolver isso, criamos um método chamado publishVideo, que adiciona um título de vídeo à lista de títulos de vídeos publicados. O método recebe um parâmetro de título, permitindo que o usuário especifique o título do vídeo. Ao invocar youtubeChannel.publishVideo("Title"), adicionamos vídeos à lista.

Em resumo, o encapsulamento envolve tornar as propriedades privadas e fornecer métodos públicos para modificá-las. Os métodos getter e setter podem ser usados para acessar e alterar propriedades específicas. Sinta-se à vontade para compartilhar sua implementação dos métodos getter e setter nos comentários para revisão.

Se você achou este vídeo útil, dê um joinha, inscreva-se no meu canal e clique no ícone do sino. Fique ligado para mais vídeos. Vejo você na próxima vez! Tchau!

C++ OOP - What is inheritance in programming?
C++ OOP - What is inheritance in programming?
  • 2020.08.20
  • www.youtube.com
Inheritance is one of the most important characteristics of Object-Oriented Programming. Inheritance is a process in which one class (aka derived class/child...
 

C++ OOP - O que é polimorfismo na programação? (exemplo simples)



C++ OOP - O que é polimorfismo na programação? (exemplo simples)

Olá a todos, sejam bem vindos ao meu canal. Meu nome é Saldina e crio vídeos relacionados a TI e programação. Se isso lhe interessa, considere se inscrever no meu canal e dar um joinha neste vídeo. Neste vídeo em particular, quero falar sobre polimorfismo.

Polimorfismo refere-se à capacidade de um objeto ter múltiplas formas. Isso significa que você pode ter dois ou mais objetos que herdam da mesma classe base. Esses objetos podem ter um método com o mesmo nome, mas implementações diferentes, resultando em comportamentos diferentes. Vamos dar uma olhada em alguns códigos que escrevemos em meus cursos anteriores. Criei uma classe chamada "YouTubeChannel" com propriedades privadas, como nome, contagem de inscritos e títulos de vídeos publicados. Ele também tem uma propriedade protegida chamada "nome do proprietário". Além disso, existem métodos públicos, um construtor, um método "getInfo" e métodos "subscribe/unsubscribe".

Em seguida, temos um tipo específico de canal do YouTube chamado "CookingYouTubeChannel", que herda da classe base. Ele tem seu próprio construtor e um método adicional chamado "prática", que é específico para canais de culinária. Agora, quero criar outra classe derivada chamada "SingersYouTubeChannel" para um canal do YouTube sobre canto. Essa classe também possui um método de "prática", mas a implementação é diferente do canal de culinária. Os cantores praticavam canto, aprendiam novas canções e até dançavam.

Para demonstrar o polimorfismo, crio instâncias dos canais de culinária e cantores do YouTube. Em seguida, invoco o método de "prática" em cada canal. Você pode ver que as respectivas implementações são chamadas com base no tipo de canal. Além disso, apresento uma propriedade "contentQuality" para rastrear a qualidade do conteúdo. Cada vez que o método de "prática" é invocado, a qualidade do conteúdo aumenta. Eu também adiciono um método chamado "checkAnalytics" que verifica a classificação de qualidade do conteúdo e gera uma mensagem com base na classificação.

Para mostrar ainda mais o polimorfismo, uso ponteiros para a classe base para apontar para objetos de classes derivadas. Eu atribuo os endereços dos canais de culinária e cantores do YouTube a esses ponteiros. Usando esses ponteiros, invoco o método "checkAnalytics" para cada canal, demonstrando que o polimorfismo nos permite usar ponteiros de classe base para chamar métodos de classe derivados.

Espero que você tenha achado este vídeo agradável. Se sim, dê um joinha e considere se inscrever no meu canal. Não se esqueça de clicar no sininho para receber as notificações dos próximos vídeos. Obrigado, e até o meu próximo vídeo. Tchau!

C++ OOP - What is polymorphism in programming? (simple example)
C++ OOP - What is polymorphism in programming? (simple example)
  • 2020.09.01
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Relação entre Funções Virtuais, Funções Virtuais Puras e Classes Abstratas em POO explicada



Relação entre Funções Virtuais, Funções Virtuais Puras e Classes Abstratas em POO explicada

Neste vídeo, explicarei o propósito e o relacionamento entre funções virtuais, funções virtuais puras e classes abstratas. Estou animado para continuar esta lista de reprodução de programação orientada a objetos. Se você tiver alguma dúvida ou tópico que gostaria de ver em vídeos futuros, deixe um comentário abaixo. Agora, vamos nos aprofundar nas funções virtuais.

Uma função virtual é uma função definida em uma classe base e pode ser redefinida em uma classe derivada. O principal objetivo das funções virtuais é permitir o polimorfismo em tempo de execução. Quando você invoca uma função virtual usando um ponteiro ou referência de classe base, a versão mais derivada dessa função será executada. Se a classe derivada tiver sua própria implementação, essa versão será executada. Caso contrário, a implementação na classe base será usada.

Vejamos um exemplo no Visual Studio. Criaremos uma classe "Instrument" com uma função virtual chamada "makeSound" que gera uma mensagem. Em seguida, criaremos uma classe derivada chamada "Accordion" que substitui a função "makeSound" com sua própria implementação. Usando um ponteiro de classe base para invocar a função, podemos ver que a versão derivada é executada. Adicionar a palavra-chave "virtual" à função de classe base garante que a versão mais derivada seja chamada.

Em seguida, vamos discutir funções virtuais puras e classes abstratas. Uma função virtual pura é uma função virtual sem implementação na classe base. Ele força as classes derivadas a fornecer sua própria implementação. Ao definir uma função virtual como "igual a zero", criamos uma função virtual pura. Isso torna a classe base uma classe abstrata, que não pode ser instanciada. As classes derivadas devem implementar a função virtual pura. Criaremos uma classe "Piano" derivada da classe "Instrumento". Se tentarmos criar um objeto do tipo "Piano" sem implementar a função virtual pura, isso resultará em um erro. No entanto, uma vez que implementamos a função na classe "Piano", podemos criar um objeto com sucesso e invocar a função.

Finalmente, vamos explorar o comportamento polimórfico das funções virtuais. Temos dois ponteiros de instrumento, um apontando para um objeto "Acordeão" e outro para um objeto "Piano". Ao criar uma matriz de ponteiros de instrumentos, podemos demonstrar que invocar a função "makeSound" usando os ponteiros da classe base resulta na execução das versões derivadas da função.

Espero que esta explicação ajude você a entender melhor as funções virtuais, as funções virtuais puras e as classes abstratas. Se você tiver mais alguma dúvida, por favor, deixe-me saber nos comentários abaixo. Obrigado por assistir, e não se esqueça de se inscrever!

Relationship between Virtual Functions, Pure Virtual Functions and Abstract Classes in OOP explained
Relationship between Virtual Functions, Pure Virtual Functions and Abstract Classes in OOP explained
  • 2021.04.15
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Abstração explicada com exemplos e códigos da vida real! - Curso C++ OOP



Abstração explicada com exemplos e códigos da vida real! - Curso C++ OOP

Neste vídeo, discutirei o importante conceito de abstração na programação orientada a objetos. Vou explicar o que é abstração e demonstrar como implementar e usar abstração na programação C++. Mas antes de nos aprofundarmos, gostaria de apresentar o C++ Builder, um IDE poderoso que permite o desenvolvimento rápido de aplicativos para várias plataformas com menos código. Ele se conecta perfeitamente a vários bancos de dados e inclui bibliotecas poderosas como estruturas VCL e FireMonkey. Comece gratuitamente usando o link na descrição.

A abstração na programação refere-se ao ato de exibir informações importantes enquanto oculta detalhes complexos e sem importância. Para entender melhor a abstração, vamos considerar um exemplo da vida real: uma máquina de café. Ao usar uma cafeteira, tudo o que você precisa saber é como colocar café e água e pressionar um botão para fazer café. O processo interno da máquina é complexo, mas é abstraído e escondido atrás de um procedimento simples. Essa abstração torna mais fácil para os usuários operar a máquina sem entender seu intrincado funcionamento. Da mesma forma, na programação, usamos a abstração para ocultar detalhes complexos e fornecer uma interface simplificada.

Outro aspecto fundamental da abstração é que os elementos abstraídos não mudam com frequência, ou pelo menos não parecem mudar para o usuário final. Isso significa que você pode modificar a implementação interna, desde que não altere a interface exposta ao usuário. Por exemplo, se uma nova empresa desenvolve uma máquina de café mais eficiente, ela pode alterar os componentes internos para reduzir o consumo de energia, fazer café mais rápido e reduzir o ruído. Contanto que o usuário ainda precise colocar café e água e pressionar o botão, a interface permanece a mesma e o usuário não precisa aprender uma nova maneira de operar a máquina. Essa padronização de comportamento por meio da abstração permite que novas empresas se baseiem nas expectativas dos usuários existentes.

Na programação, podemos criar camadas de abstração para ocultar detalhes complexos e fornecer uma interface simplificada para outros desenvolvedores. Por exemplo, se eu criar uma classe com várias funcionalidades complexas, posso fornecer uma camada de abstração que oculta a complexidade subjacente. Outros desenvolvedores podem então utilizar a interface simples da classe sem precisar conhecer os detalhes da implementação. Em C++, alcançamos a abstração usando classes abstratas, que contêm pelo menos uma função virtual pura. Essas classes abstratas definem o contrato ou a interface que outras classes devem implementar.

Vamos criar uma classe abstrata chamada "Smartphone" para ilustrar isso. Ele declarará uma função pública chamada "Tire uma selfie", que serve como uma funcionalidade importante que todos os smartphones devem ter. Ao tornar essa função uma função virtual pura usando a sintaxe "= 0", transformamos a classe em uma classe abstrata. Não podemos criar instâncias de classes abstratas diretamente, mas podemos criar ponteiros para elas. Qualquer classe que queira ser um smartphone deve herdar dessa classe abstrata e fornecer sua própria implementação da função virtual pura.

Por exemplo, vamos criar uma classe "Android" herdada da classe "Smartphone". Nesta aula, implementamos a função "Take a selfie" com a lógica complexa específica para dispositivos Android. Da mesma forma, podemos criar uma classe "iPhone" que também herda de "Smartphone" e fornece sua própria implementação da função "Tire uma selfie". Cada classe pode ter sua própria implementação exclusiva, mas do ponto de vista de alguém usando o smartphone, o processo permanece o mesmo.

A abstração obtida por meio da classe "Smartphone" permite que os desenvolvedores que trabalham com classes Android ou iPhone se concentrem em seus detalhes específicos de implementação sem precisar saber sobre a lógica da outra classe. Eles precisam apenas aderir ao contrato definido pela classe abstrata, garantindo que as funcionalidades necessárias sejam implementadas. Ao usar a abstração, criamos uma separação de interesses, simplificamos o uso do código e facilitamos o desenvolvimento modular. A abstração nos permite criar interfaces padronizadas e ocultar implementações complexas, resultando em mais manutenção.

A abstração nos permite criar interfaces padronizadas e ocultar implementações complexas, resultando em código mais fácil de manter e flexível. Ele promove a reutilização de código e o desenvolvimento modular ao encapsular a funcionalidade em classes abstratas que podem ser estendidas e implementadas por outras classes. Além das classes abstratas, C++ também fornece outro mecanismo para abstração chamado interfaces. As interfaces são classes puramente abstratas que definem um contrato de métodos que devem ser implementados por qualquer classe que queira aderir à interface. Isso permite uma abstração ainda maior e um acoplamento solto entre os componentes.

Para resumir, a abstração na programação orientada a objetos é o processo de ocultar detalhes complexos e fornecer uma interface simplificada. Ele permite que os desenvolvedores se concentrem em implementações específicas enquanto abstraem a complexidade subjacente. Classes abstratas e interfaces são as principais ferramentas para obter abstração em C++. Usando a abstração, podemos criar um código mais modular, reutilizável e sustentável.

Abstraction explained with real-life examples and code! - C++ OOP Course
Abstraction explained with real-life examples and code! - C++ OOP Course
  • 2021.04.21
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Operador C++ Sobrecarga do iniciante ao avançado (explicação detalhada)



Operador C++ Sobrecarga do iniciante ao avançado (explicação detalhada)

Olá a todos e bem vindos ao meu canal. Eu estava no meio do meu trabalho e não tinha planejado fazer esse vídeo, mas como estou trabalhando em um projeto muito interessante, pensei porque não mostrar para vocês? Atualmente estou trabalhando em um grande projeto com milhares de arquivos e milhões de linhas de código. Eu estava prestes a analisar meu código, que geralmente leva de 10 a 15 minutos para ser concluído. Então, enquanto aguardamos a análise, vou ensinar sobre sobrecarga de operadores.

O analisador que uso se chama PDS Studio, e você pode obtê-lo gratuitamente usando o link na descrição. Mostrarei como uso o PDS Studio para encontrar bugs e otimizar meu código. Depois de baixar o PDS Studio, você precisa de algum código para analisar. Eu tenho a solução do meu trabalho, mas não posso mostrar o código devido a um acordo de confidencialidade. No entanto, mostrarei os resultados da análise mais adiante no vídeo.

Para analisar seu código usando o PDS Studio, você precisa clicar na guia Extensões e selecionar PDS Studio. Em seguida, escolha toda a solução para análise. Como a análise leva algum tempo, mudarei para um projeto vazio e, enquanto isso, ensinarei sobre a sobrecarga do operador.

A sobrecarga de operadores nos permite definir como um determinado operador se comporta com um tipo de dado específico. Por exemplo, o operador de adição se comporta de maneira diferente quando usado com números em comparação com um tipo de dados definido pelo usuário. Podemos criar funções de operador para definir esse comportamento. Explicarei esse conceito usando um exemplo de adição de dois tipos de dados definidos pelo usuário.

Em C++, podemos criar funções de operador usando a palavra-chave "operator" seguida do operador que queremos sobrecarregar. Por exemplo, podemos sobrecarregar o operador plus criando uma função "operator+". Vou demonstrar isso criando uma estrutura chamada "YouTubeChannel" com dois atributos: "name" e "subscribersCount". Também criaremos um construtor para essa estrutura.

Para sobrecarregar o operador de inserção (<<) para nosso tipo YouTubeChannel, precisamos definir uma função "operator<<". Esta função recebe dois parâmetros: um objeto do tipo "ostream" (por exemplo, "cout") e um objeto do tipo "YouTubeChannel". Passamos esses parâmetros por referência para evitar cópias desnecessárias.

Dentro da função "operator<<", usamos o objeto "ostream" para gerar as informações sobre o YouTubeChannel. Nesse caso, imprimimos o nome e a contagem de assinantes. Ao sobrecarregar o operador de inserção, habilitamos a impressão de objetos YouTubeChannel usando o comando "cout".

Para usar o operador de inserção sobrecarregado, podemos simplesmente escrever "cout << youtubeChannelObject". Isso funciona de maneira semelhante a como imprimimos outros tipos usando "cout". Também podemos invocar a função operator diretamente, como uma função normal, passando o objeto "cout" e o objeto YouTubeChannel como parâmetros.

Lembre-se de que operadores diferentes têm formas diferentes de sobrecarga. O operador de inserção é sobrecarregado usando a função "operator<<", mas outros operadores como mais, menos, maior que, menor que, igual a, etc., têm suas próprias funções de operador específicas.

É isso para este vídeo. Espero que você tenha achado útil esta introdução à sobrecarga de operadores. Verifique a descrição para obter uma lista de todos os operadores que podem ser sobrecarregados em C++. Assim que a análise estiver concluída, mostrarei os resultados. Se você tiver alguma dúvida, sinta-se à vontade para perguntar nos comentários. Obrigado por assistir!

C++ Operator Overloading beginner to advanced (in-depth explanation)
C++ Operator Overloading beginner to advanced (in-depth explanation)
  • 2021.06.30
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...