ORIENTACAO A OBJETOS - CONCEITO
Quem disse que os aplicativos em VB6 não podem ser usados de forma ilegal? Compilados em PCode, com um pouco de esforço, é possÃvel driblar as obscuridades de um código não reversÃvel. Anulando ou colocando jumps entre as instruções de segurança, e fazendo uma nova cópia desses executáveis, seu produto vai tá na mão de qualquer um.
E acho que ainda tem outro detalhe que muita gente não se ligou ainda. Querer esconder segredo de aplicações CRUD, não é querer esconder muita coisa. Boa observação de um sistema e acesso ao banco de dados, o mesmo pode ser replicado e até muitas vezes melhor. Se temos que esconder alguma inteligência ou implementação de uma tecnologia particular e única, aà sim, temos co o que nos preocupar.
E acho que ainda tem outro detalhe que muita gente não se ligou ainda. Querer esconder segredo de aplicações CRUD, não é querer esconder muita coisa. Boa observação de um sistema e acesso ao banco de dados, o mesmo pode ser replicado e até muitas vezes melhor. Se temos que esconder alguma inteligência ou implementação de uma tecnologia particular e única, aà sim, temos co o que nos preocupar.
Isso mesmo LLAIA, e digo mais, a maioria dos [Ô]códigos[Ô] que usuários postam aqui, não usam boas práticas nem mesmo no VB6(leia-se, concatenação de query), deixando o sistema extremamente vulnerável à ataques de SQL Injection. Além disso, uma aplicação .NET Web, é muito, mas muito difÃcil de se fazer engenharia reversa.
Citação:Pense nisso, você está preso ao paradigma de código e não vai evoluir se não sair dele.
Sou apenas curioso, programação pra mim é apenas uma brincadeira, passa tempo ... eu até pensei em aprender python ... ou C# como vc mesmo kerplunk me aconselhou ....
a programação, no meu ver, cresce em Progressão aritmetica, tenho medo de parar de programar e quando resolver voltar, vai tá tudo ... mas tudo diferenteeee
Citação::
Pense nisso, você está preso ao paradigma de código e não vai evoluir se não sair dele.
Sou apenas curioso, programação pra mim é apenas uma brincadeira, passa tempo ... eu até pensei em aprender python ... ou C# como vc mesmo kerplunk me aconselhou ....
a programação, no meu ver, cresce em Progressão aritmetica, tenho medo de parar de programar e quando resolver voltar, vai tá tudo ... mas tudo diferenteeee
Ah, isso com certeza, um ano parado e você já estaria [Ô]descartado[Ô] como profissional no mercado e dificilmente se adaptaria à todo o conteúdo novo. Mas aà entra a importância de dominar conceitos. As mudanças nos conceitos são bem mais lentas e a evolução deles se dá de forma bem mais gradual. Por isso, se você domina um conceito e fica um tempo sem se atualizar nele, você só teria que ver as diferenças do que você conhece com o que é novo. Dominando conceitos, você vai ver que código, é a coisa mais simples do mundo.
Vários tópicos ainda que estão direta ou indiretamente ligados ao assunto:
- Serialização/XML
- Interfaces
- Conceitos de Lista(List<T>, ::CollectionBase...)
- Overloading
- Construtores
E ainda muita coisa pra aprender. Posso ajudar. O que gostariam de saber primeiro?
- Serialização/XML
- Interfaces
- Conceitos de Lista(List<T>, ::CollectionBase...)
- Overloading
- Construtores
E ainda muita coisa pra aprender. Posso ajudar. O que gostariam de saber primeiro?
Kerplunk, por mim pode seguir pela ordem da lista que você postou.
FFCOUTO,
Apoiado.
Apoiado.
No que diz a sua didática .... comece pelo que voce acha por onde deve começar ... uma criança quando nasce sai primerio a cabeça depois um braço outro ... corpo e pés .....
Coloque conforme a sua didática, conhecimento e expereriencia ......
Coloque conforme a sua didática, conhecimento e expereriencia ......
Bem acho que deverÃamos começar com Listas. Então vamos lá.
Vou assumir aqui que você saiba criar uma classe com propriedades simples de tipos primitivos(int, double, string...). Então crie uma classe chamada [Ô]Cliente[Ô] com as propriedades Codigo(int), Nome(string), DataNascimento(DateTime). Pode ser em um programa console mesmo.
Em seguida, vamos instanciar uma entidade dessas e uma lista.
Nada de mais. Agora vamos colocar alguns valores na entidade e adicioná-la na lista:
Certo, agora, a lista contém um elemento. Vamos criar mais algumas instâncias de cliente e adicionar também na lista. Vou deixar isso por sua conta, basta instanciar a entidade, atribuir valores e colocar na lista. O importante é ter várias instâncias(cli1, cli2, cli3) para adicionar, não reaproveite a mesma instância.
Depois de uns 3 ou 4 adicionados, na lista, temos algo para poder trabalhar. Vamos entender um pouco então sobre expressões lambda, que nada mais são do que uma maneira de selecionar dados direto da lista, mais ou menos como o LINQ faz. Na verdade, se pode usar LINQ com List<T>, mas eu prefiro uma expressão lambda, elas me parecem mais claras.
Vamos supor agora, que dessa lista, você queira selecionar todos os Ãtens em que o ano da data seja maior que 1970(espero que tenha adicionados alguns Ãtens com essa caracterÃstica, senão, adicione). Uma expressão lambda para isso seria algo como:
Neste ponto, a variável [Ô]clientesFiltrados[Ô], seria também uma lista de clientes, mas contendo somente os clientes em que o ano da data de nascimento, seja maior que 1970.
Agora falando tecnicamente. Analisando a linha em que a variável filtrada é criada, vamos ter algo como:
Crie uma variável do tipo Lista de clientes, que terá os valores da variável listaCli onde os Ãtens de listaCli o ano de DataNascimento seja maior que 1970.
[Ô]Aportuguesando[Ô] a linha, fica mais simples de se entender, não é? Agora, você se pergunta: Então toda essa linha é uma expressão lambda? Resposta: Não. Expressão lambda seria o que está dentro do parênteses do [Ô]Where[Ô]. Aquilo, tecnicamente é chamado de Predicado(em inglês Predicate), que nada mais é(nesse caso) do que um delegate(podemos ver isso um outro dia).
A grande sacada das List<T> são todos os métodos que ela disponibiliza para trabalharmos com a lista, alguns deles:
Where
First
OrderBy
OrderByDescending
Distinct
GroupBy
Max
e por aà vai, basta criar uma List<T> de qualquer classe, que você pode ver todo os métodos dela quando pressiona o [Ô]ponto[Ô]
Esses métodos, fazem exatamente o que o SQL faz com uma tabela: Agrupar, ordenar, fazer distinção... mas você não estará trabalhando em uma tabela e sim em uma variável na memória, ou seja, muito mais rápido. Mais adiante, posso ensinar como fazer para [Ô]transformar uma consulta SQL em uma lista de objetos[Ô].
Outra vantagem das List<T> é que elas herdam IEnumerable, ou seja, podem ser enumeradas(veremos isso mais adiante). Fato é que uma List<T> pode ser passada como DataSource para um DataGridView sem o menor problema, o grid vai entender e mostrar a lista. E se lembrar do detalhe que [Ô]Where[Ô], [Ô]OrderBy[Ô], [Ô]OrderByDescending[Ô], retornam também uma lista de objetos, pode ser feito algo assim:
E o grid vai mostrar os Ãtens da lista cujo ano da propriedade DataNascimento seja menor que 1980, simples não?
E tem mais!!(parece aqueles comerciais da polyshop)
Você ainda pode transformar o DataSource List<T> que você passou para o grid, de volta em uma List<T> usando um simples Cast:
E assim, novamente trabalhar com a lista, fazendo ordenação, agrupamento, filtro, qualquer método que List<T> ofereça e se quiser passar novamente a lista trabalhada para o Grid.
Então, estão começando a entender porque eu frizo tanto que se use OOP? Isso é só uma pequena parte de tudo que pode ser feito, tem ainda muito, mas muito mais. Vou parando por aqui para responder as dúvidas...
Vou assumir aqui que você saiba criar uma classe com propriedades simples de tipos primitivos(int, double, string...). Então crie uma classe chamada [Ô]Cliente[Ô] com as propriedades Codigo(int), Nome(string), DataNascimento(DateTime). Pode ser em um programa console mesmo.
Em seguida, vamos instanciar uma entidade dessas e uma lista.
Cliente cli = new Cliente();
List<Cliente> listaCli = new List<Cliente>();
Nada de mais. Agora vamos colocar alguns valores na entidade e adicioná-la na lista:
cli.Codigo = 1;
cli.Nome = [Ô]Jose da Silva[Ô];
cli.DataNascimento = new DateTime(1964, 4, 5);// = 5 de abril de 1964
listaCli.Add(cli);
Certo, agora, a lista contém um elemento. Vamos criar mais algumas instâncias de cliente e adicionar também na lista. Vou deixar isso por sua conta, basta instanciar a entidade, atribuir valores e colocar na lista. O importante é ter várias instâncias(cli1, cli2, cli3) para adicionar, não reaproveite a mesma instância.
Depois de uns 3 ou 4 adicionados, na lista, temos algo para poder trabalhar. Vamos entender um pouco então sobre expressões lambda, que nada mais são do que uma maneira de selecionar dados direto da lista, mais ou menos como o LINQ faz. Na verdade, se pode usar LINQ com List<T>, mas eu prefiro uma expressão lambda, elas me parecem mais claras.
Vamos supor agora, que dessa lista, você queira selecionar todos os Ãtens em que o ano da data seja maior que 1970(espero que tenha adicionados alguns Ãtens com essa caracterÃstica, senão, adicione). Uma expressão lambda para isso seria algo como:
List<Cliente> clientesFiltrados = listaCli.Where(cliente => cliente.DataNascimento.Value.Year > 1970).ToList();
Neste ponto, a variável [Ô]clientesFiltrados[Ô], seria também uma lista de clientes, mas contendo somente os clientes em que o ano da data de nascimento, seja maior que 1970.
Agora falando tecnicamente. Analisando a linha em que a variável filtrada é criada, vamos ter algo como:
Crie uma variável do tipo Lista de clientes, que terá os valores da variável listaCli onde os Ãtens de listaCli o ano de DataNascimento seja maior que 1970.
[Ô]Aportuguesando[Ô] a linha, fica mais simples de se entender, não é? Agora, você se pergunta: Então toda essa linha é uma expressão lambda? Resposta: Não. Expressão lambda seria o que está dentro do parênteses do [Ô]Where[Ô]. Aquilo, tecnicamente é chamado de Predicado(em inglês Predicate), que nada mais é(nesse caso) do que um delegate(podemos ver isso um outro dia).
A grande sacada das List<T> são todos os métodos que ela disponibiliza para trabalharmos com a lista, alguns deles:
Where
First
OrderBy
OrderByDescending
Distinct
GroupBy
Max
e por aà vai, basta criar uma List<T> de qualquer classe, que você pode ver todo os métodos dela quando pressiona o [Ô]ponto[Ô]
Esses métodos, fazem exatamente o que o SQL faz com uma tabela: Agrupar, ordenar, fazer distinção... mas você não estará trabalhando em uma tabela e sim em uma variável na memória, ou seja, muito mais rápido. Mais adiante, posso ensinar como fazer para [Ô]transformar uma consulta SQL em uma lista de objetos[Ô].
Outra vantagem das List<T> é que elas herdam IEnumerable, ou seja, podem ser enumeradas(veremos isso mais adiante). Fato é que uma List<T> pode ser passada como DataSource para um DataGridView sem o menor problema, o grid vai entender e mostrar a lista. E se lembrar do detalhe que [Ô]Where[Ô], [Ô]OrderBy[Ô], [Ô]OrderByDescending[Ô], retornam também uma lista de objetos, pode ser feito algo assim:
dgvClientes.DataSource = listCli.Where(cliente => cliente.DataNascimento.Value.Year<1980).ToList();
E o grid vai mostrar os Ãtens da lista cujo ano da propriedade DataNascimento seja menor que 1980, simples não?
E tem mais!!(parece aqueles comerciais da polyshop)
Você ainda pode transformar o DataSource List<T> que você passou para o grid, de volta em uma List<T> usando um simples Cast:
List<Cliente> lisCliente = (List<Cliente>)dgvClientes.DataSource;
E assim, novamente trabalhar com a lista, fazendo ordenação, agrupamento, filtro, qualquer método que List<T> ofereça e se quiser passar novamente a lista trabalhada para o Grid.
Então, estão começando a entender porque eu frizo tanto que se use OOP? Isso é só uma pequena parte de tudo que pode ser feito, tem ainda muito, mas muito mais. Vou parando por aqui para responder as dúvidas...
Hmmm, parece que está todo mundo [Ô]brincando[Ô] com as List<T>, ou ninguém entendeu
Faça seu login para responder