PedraChave.Org

por Paulo Santos – I2

2020 foi um ano particularmente penoso para todos nós, brasileiros. A COVID -19 fez sua feroz incursão no Brasil, causando medo, internações, recuperações penosas, mortes.

Mas 2020 foi também um ano de esperança para mim. Foi quando o Prof. Dr. Dalton Raphael, da EBA/ UFRJ me procurou com uma proposta de criação de site sobre estereotomia. Naquele momento penoso, este projeto foi uma espécie de renascer das cinzas para mim, após uma internação angustiante.

Estereotomia é a ciência que estuda a construção onde as pedras são encaixadas de modo a se equilibrarem formando prédios inteiros. A pedra principal desse conjunto é chamada de pedra-chave. É é este o nome do site criado: pedrachave.org .

Sou grato ao professor Dalton pela oportunidade de colaborar neste projeto.

Dúvidas sobre Internet residencial.

Olha a pergunta da usuária, pessoal:

O que vale mais a pena ? Ter uma banda larga de 10 Megabits ou de 40 Gigabytes ?

Antes dos mais informatizados começarem rir da pergunta, vamos esclarecer: Ninguém nasce sabendo. Eu, por exemplo, não entendo de futebol ou de mecânica automotiva. Pelo visto, também não entendo de política. Mas, felizmente, posso ajudar as pessoas na área de informática, redes de computadores etc.

A velocidade de uma rede se mede em bits por segundo (bps) e seus múltiplos: Kilobits por segundo (Kbps), Megabits por segundo (Mbps), Gigabits por segundo (Gbps).

Agora, a quantidade de informação que passa por uma rede, ou que é armazenada em um dispositivo, é medida em bytes e seus múltiplos: Kilobyte (Kb), Megabyte (Mb), Gigabyte (Gb), Terabyte (Tb) etc. Cada byte tem 8 bits.

Os meios de transmissão de sinal mais comuns para o grande público são: sinal de radio, 4G ou 5G (em teste), que é micro-onda e, portanto um tipo de rádio, cabo metálico coaxial, fibra óptica. Qualquer outro método está fora da nossa análise, porque é pouco usado nesse caso.

Quando o ponto de rede chega em sua casa, o sinal vai para o seu roteador e pode ser distribuído para a família por Wi-fi ou por cabo de rede ethernet. O wifi é para notebooks, tablets e telefones e o cabo ethernet (aquele azul) para os computadores de mesa e Smart TVs e TV Boxes.

Em termos de velocidade de acesso internet, as ofertas mais comuns no mercado variam de 20 Mbps (a US$ 11,56 mensais) a 200 Mbps (a US$ 28,91 mensais). Com 20 Mbps, não dá para assistir TV Box direito. Mas dá para atender à navegação internet, WhatsApp etc. Se você for profissional de TI e precisar baixar um CD, 20 Mbps é pouco. Mas se você é usuário comum, dá pro gasto. Profissionais de TI ficam com 200 Mbps, mesmo sabendo que seus roteadores Wi-Fi dentro de casa não chegam a essa velocidade. Mas os conectam direto aos seus computadores por cabo ethernet e usufruem da velocidade total.

Operadoras mal-intencionadas costumam colocar anúncios misturando a quantidade de dados máxima permitida por mês com a velocidade da rede oferecida. Fujam disso. A maioria dos provedores sérios de fibra ou cabo coaxial não limita a quantidade de Megabytes que você pode trafegar na rede. Já as operadoras de celular, sim. Aí depende do preço. Consulte o contrato oferecido e converse com o seu profissional de TI de confiança.

Relatório Vigia: 16 cenários de rupturas para os próximos 30 anos.

Marcado por uma pandemia global sem precedentes, o ano de 2020 viu o panorama político e econômico internacional virar de cabeça para baixo pela multiplicação de crises interligadas: econômica, ecológica, democrática… Diante de um futuro cada vez mais incerto, pesquisadores procuram antecipar rupturas futuras para se proteger contra as mais ameaçadoras e favorecer as mais desejáveis. Esse é o objetivo do Rapport Vigie 2020, publicado pelo centro de reflexão prospectivo Futuribles International. Entre transformações no meio ambiente, mudança nas relações de força entre potências e o peso crescente das religiões, 16 cenários de rupturas são explorados para os próximos 30 anos. A reportagem é de Raphaël Dahl, publicada por Mr Mondialisation, 10-03-2021. A tradução é de André Langer. Republicação IHU Online.

[ Leia ]

Fatores de sucesso para profissionais de nível superior

  1. Coeficiente de rendimento >= 7.
  2. Livros e artigos publicados em bons periódicos, editoras e mídias da internet.
  3. Colaboração com os especialistas da área.
  4. Domínio da língua inglesa.
  5. Boa habilidade de comunicação escrita e falada.
  6. Obtenção de bolsas nacionais e estrangeiras.
  7. Vivência internacional.
  8. Multidisciplinaridade.
  9. Olho no futuro e nas tendências.
  10. Patentes registradas.
  11. Bom conhecimento da história de sua especialidade, inclusive biografias.
  12. Participação em iniciativas abertas.
  13. Bom conhecimento dos desafios de sua área.
  14. Aprovação em testes de nível nacional e internacional: IELTS, TOEFL, POSCOMP, EUF, SAB, Olimpíadas…
  15. Boa saúde física e aparência geral (um ponto polêmico).
  16. Domínio de ferramenta especial ou técnica rara.
  17. Objetividade e eficiência na aquisição da informação.
  18. Especializações de alto nível em instituições conceituadas.
  19. Habilidade com computadores.
  20. Bons relacionamentos pessoais formando um “rede do bem”.
  21. Passagem pelo mercado.

Olá !

Esta lista certamente poderá ser de interesse do técnico e não apenas do graduado. Em breve explico cada item, principalmente o 15, que é bastante polêmico.

Programando com seu Windows 10: DOS SHELL

Seu computador está muito lento ? Ele demora a fazer as coisas ? Se a resposta for “não”, ele provavelmente é uma máquina nova. Isso porque o Windows guarda muito lixo no disco rígido. E não é só o Windows ! Seus navegadores também acumulam coisas. O Edge, o Chrome, O Firefox, o Opera, todos os navegadores guardam coisas no disco para acelerar as navegações futuras, para entender por onde o usuário esteve, para guardar credenciais de sites etc. Com o tempo essas coisas pesam e isso por uma razão muito simples. Há um limite prático para a quantidade de arquivos em um diretório do Windows. Depois desse limite, o Windows fica desagradavelmente lento.

Vamos fazer uma experiência que só serve para quem tem Google Chrome instalado. Na tela do Windows existe um local para pesquisar. Entre lá e digite CMD. Depois aperte [enter].

Com isso você entrará no DOS, o antigo sistema operacional do Windows.

Digite:

dir .\AppData\Local\Google\Chrome\”User Data”\Default\”Application Cache”\Cache

Muita atenção nas aspas do comando, porque o DOS não gosta de espaços em nomes de pastas.

Após o [enter] você verá uma tela parecida com esta:


No meu caso, foram 380 arquivos. Quero apagá-los, pois são virtualmente inúteis e tornam o navegador Chrome lento. Assim, vamos fazer um programa para isso. Para criar o programa, vamos usar o editor de texto [ notepad.exe ]. Na própria tela do DOS, digite:

Notepad

…e digite [enter]

O pequeno programa que vamos escrever é o seguinte

@echo off echo S > resposta.txt
del .\AppData\Local\Google\Chrome\”User Data”\Default\”Application Cache”\Cache\*.* < resposta.txt

Este é um programa escrito em Shell e pode ser salvo com o nome [ limpa.bat ]. Tome o cuidado de remover a extensão [ txt ] do arquivo (automaticamente colocada pelo Notepad ), porque senão ele não executa. Grave em seu diretório este arquivo e não em [ Documentos ], como é comum. O seu diretório tem o formato [ C:\Users\seunome ].

Para executar, depois de gravar, é só digitar:

limpa

…e depois apertar o [enter]

Se você executar o comando da tabela anterior vai ver que os arquivos sumiram. Vale explicar os comandos que usamos neste script:

Linha 1: Faz com que o DOS pare de repetir os comandos que você digitar no programa.

Linha 2: Cria um arquivo chamado [ resposta.txt ] com um “S” e um [enter] lá dentro.

Linha 3: Manda apagar todos os arquivos do diretório especificado, confirmando a ordem com o conteúdo do arquivo [ resposta,txt ]. O sinal de “<” é um redirecionamento de entrada para o comando [ del ], que efetivamente apaga os arquivos. Cuidado com o comando [ del ]. Ele é perigoso !

O que aprendemos ?

  1. É possível programar em Windows 10 usando uma linguagem, chamada DOS Shell.
  2. É necessário usar um editor de texto para escrever programas.
  3. DOS-Shell pode atuar sobre arquivos do sistema operacional.

[ anterior ]

Programando com seu Windows 10: Introdução.

Um aluno me perguntou uma vez: – Como eu programo em Windows 10 ?

Achei a pergunta simples e interessante, porque quando eu recebi meu primeiro computador, dado por meus padrinhos, ele vinha com uma linguagem chamada Basic. Com ela eu aprendi a programar. Aprendi bem. Tornei-me programador profissional em várias linguagens, após muitas madrugadas em claro. Meus programas eram voltados para o terminal, única opção na época.

Com o aparecimento do Windows, uma camada nova de programação apareceu. Era necessário dominar as Microsoft Foundation Classes (MFC), uma biblioteca que fornecia o “motor gráfico” do Windows, a API, e várias outras características.

As MFC 1.0 (lançadas em 1993) eram feitas em Microsoft C/C++ versão 7. As versões seguintes, até 4.0 foram feitas em Visual C++. Mas quem quisesse programar para Windows tinha a opção de usar o Microsoft Visual Basic.

“Visual Basic era muito usada em ambientes corporativos: uma pesquisa de 2005 indicou que 62% dos programadores usavam uma forma de Visual Basic, seguido de C++, JavaScript, C# e Java. Atualmente foi suplantada pelo Java”

Wikipedia – verbete Visual Basic

Hoje, o ambiente típico de programação Windows é o .NET (dot Net) e o Microsoft Visual Studio, que debutou em 1997. Desenvolvido em C++ e C#, ele permite ao programador usar C Sharp, C++, Visual Basic .NET, J Sharp. O tamanho do pacote é 7 GB e ele não caberia num disco rígido de microcomputador de 1993.

Com o crescimento das bibliotecas, cresceu a quantidade de coisas que o programador deveria dominar. A ideia por trás das MFC era tornar a vida do programador mais fácil. Mas no antigo Basic, não havia a popularização dos paradigmas de programação que há hoje: objetos, classes, front-end, back-end, full-stack, paralelismo, orientação a eventos, GUI (Graphical User Interface), mobile (você saberá mais sobre isso no glossário). Posso quase dizer que, no ambiente de programação de hoje, a vedete é o próprio ambiente e não aplicação que se quer criar. Muitas vezes me perguntam: “- Qual á a linguagem adequada para criar um programa que faça a minha firma funcionar ?”. Minha resposta sempre é: “- Compre um pronto, com suporte técnico incluído !”.

Então, para que uma pessoa aprenderia a programar hoje ? Talvez a resposta seja “Para ganhar dinheiro !”. Então, para ganhar dinheiro, é preciso entender como os programadores de sucesso trabalham hoje nas grandes empresas. Já aviso que é um ciclo vicioso, que leva a mais gigabytes, mais bibliotecas, mais ferramentas de programação, mais estudos, mais certificações para comprovar o que você sabe. Esse processo pode até ser de graça, como veremos, mas na maioria das vezes gera muitos gastos.

Mas vamos dar uma parada na filosofia e na história. Quero que você veja como é possível programar rapidamente usando os recursos que seu Windows já tem.

Para conhecer as profissões da área de programação, consulte:
[ http://treinamentolivre.com/d/node/18 ]

[ próximo ]

PENSAMENTO PLURAL Qual mundo irá surgir após a pandemia? The Economist

Fonte: [ https://www.heldermoura.com.br/pensamento-plural-qual-o-mundo-que-ira-surgir-apos-a-pandemia-the-economist/ ]

O que está por vir em 2021, em 20 pontos da revista “The Economist”.

1 – Os humanos querem se socializar novamente, mas o trabalho remoto basicamente permanecerá o mesmo. Vamos continuar a trabalhar online a partir de nossas casas cada vez mais adaptadas e com reuniões em lugares diferentes todos os meses para socializar e conectar.

2 – Escritórios vão fechar com uma porcentagem muito alta e esse modelo retrógrado será tomado por tecnologias disruptivas. A cada dia teremos mais assistentes digitais para trabalhar de forma eficiente. As grandes corporações serão sempre lembradas como os enormes mamutes de 1980-2020 em extinção

3 – Os hotéis de trabalho desaparecem em pelo menos 50%. Viagens, congressos ou reuniões de trabalho nunca voltam a ser como eram, se puderem ser feitos online. O turismo de trabalho praticamente desaparece. As chamadas se tornam chamadas de vídeo.

4 – As casas tornam-se mais tecnológicas e adaptadas ao trabalho diário. Muitas empresas se dedicarão a resolver as necessidades de trabalhar em casa. Hoje você pode morar fora de uma cidade grande, trabalhar da mesma forma e gerar o mesmo valor.

5 – A produtividade não depende mais de um chefe que te vê, agora é por meio de plataformas que te ajudam a medir resultados, KPIs e tempos eficientes. A forma de contratação de pessoal é repensada. Contratar os melhores do mundo hoje é mais fácil, barato e eficiente. Não haverá diferença entre contratar pessoal local e estrangeiro. Hoje somos todos globais.

6 – Tudo o que é repetitivo torna-se virtual e em regime de assinatura. Igrejas, arte, academias, cinemas, entretenimento. Poucos lugares podem manter estruturas físicas como antigamente.

7 – Empresas que não investem pelo menos 10% em novas tecnologias irão desaparecer. A empresa tradicional chegou ao fim em 2020. Resta esperar sua morte final. Uma empresa de tecnologia, fresca e nova hoje, pode substituir outra que tem feito o mesmo nos últimos 50 anos.

8 – O turismo para entretenimento retorna plenamente fortalecido no segundo semestre de 2021, sempre acompanhado de muita tecnologia na sua operação, desde a compra, a operação e as experiências a serem recebidas. As pessoas apreciam mais do que nunca visitar o natural mas com soluções altamente tecnológicas. Locais mais remotos, experiências mais autênticas suportadas com assistência digital 24 horas por dia, 7 dias por semana.

9 – O tratamento de dados pessoais torna-se mais delicado e as grandes plataformas vão mudar. As pessoas voltam a pagar assinaturas devido ao senso de transparência que isso envolve. Eles preferem pagar a doar seus dados. As grandes marcas hoje valem sua credibilidade. Tudo pode ser copiado ou replicado, exceto prestígio.

10 – A força de trabalho será drasticamente reduzida e muitas operações simples serão fornecidas por IA. Em 2024, a IA já lidará com operações complicadas em milhões de locais. Uma grande temporada global de demissões está chegando. O desemprego ocorre por motivos multifatoriais e não apenas por causa da crise econômica.

11 – A educação nunca mais será igual. Cada um pode estudar o que precisar. Estudar offline e online será normal. Escolas e universidades são transformadas em um esquema híbrido para sempre. Serão aceitos candidatos sem formação universitária para cargos de menor importância, que tenham a experiência necessária.

12 – O sistema médico será adaptado com tecnologia remota para sempre. Uma consulta médica por teleconferência será normal. A vacina da COVID é muito rápida, mas você encontrará grandes desafios ao longo do caminho. Grandes hospitais repensam seu funcionamento devido às crises econômicas que sofreram com a Covid 19. As pessoas ficam menos doentes com vírus, bactérias e doenças devido ao manuseio inadequado dos alimentos, graças à limpeza recorrente do indivíduo comum.

13 – A economia pessoal se contrai, novas formas de gerar transações comerciais são utilizadas e as pessoas economizam mais. Uma alta porcentagem dos gastos da família vai para atividades que antes não tinham demanda e vice-versa. A compra de itens como roupas elegantes é substituída por roupas casuais.

14 – E-commerce continua a crescer, players como Facebook, Tik-Tok e YouTube entram para competir com a Amazon. Fechamento de 50% das lojas físicas globais. As lojas sobrevivem graças ao fato de serem experiências e showrooms, mas o comércio real no final de 2024 será maior online do que presencial em muitas áreas. Os grandes shoppings ficarão presos no tempo. Poucos sobreviverão a longo prazo.

15 – Mudanças climáticas serão um tópico muito discutido e apoiado. As grandes indústrias continuarão a se transformar com apoio da IA. A adoção da bicicleta como principal meio de transporte continuará crescendo graças à transformação das cidades. Vamos passar da questão Covid para a Mudança Climática como a questão principal.

16 – Novos modelos de informações e notícias por assinatura com mais transparência ajudarão a disponibilizar conteúdo sem tantas fake news. Credibilidade e transparência serão a pedra angular de todas as empresas. As pessoas estão cansadas de tanta informação e preferem interagir com alguns seletos provedores de informação.

17 – A saúde mental torna-se um tema recorrente. Grandes plataformas ajudam as pessoas a enfrentar as situações de agressividade, solidão e angústia que vivenciaram durante o isolamento. Há muito a repensar. As crises de liderança nas empresas serão mais comuns a cada dia.

18 – Os grandes problemas como educação, saúde, energia, segurança, política, destruição da classe média, ganham destaque. Grande capital é investido para fazer o bem, enquanto os problemas globais são resolvidos. Empreendedorismo social no seu melhor, com resultados financeiros muito substanciais.

19 – Tudo vai para o natural e saudável. Alimentos, experiências e forma de interação. 100% natural, produzir a própria comida, meditar e se exercitar, passa a fazer parte do dia a dia. Ser mais saudável é o “novo luxo”. Produtos suntuosos perdem valor e justificativa. A reciclagem está voltando muito mais forte depois de um ano de desperdício incontrolável, agora com grandes tecnologias que realmente resolvem os problemas gerados no passado.

20 – O mundo está vendo este ano como um novo começo. Um renascimento. As pessoas vão repensar seus objetivos pessoais, de trabalho, saúde, dinheiro e espirituais. Grandes oportunidades estão surgindo para satisfazer todos esses requisitos e mudanças de pensamento. Acumular, consumir e viver pelo material vai para o lado negativo. A inovação, a tecnologia, o pensamento natural e lateral são a base da nova realidade. Todos estão a tempo de encontrar novos caminhos. Você apenas tem que encontrar as novas rotas pessoais ou comerciais.

Fonte: The Economist.

Copiando código JavaScript de terceiros.

Por ser uma linguagem interpretada e por rodar no cliente, o JavaScript permite “bisbilhotar” o código dos outros. Mas não se sinta culpado por isso. Os programadores vivem copiando coisas e essa é uma atividade salutar na linguagem. Alguns minificam as bibliotecas mas a maioria as deixa legíveis mesmo. Ao exibir o código de uma página, você verá um texto parecido com o exemplo abaixo:

<script type=”text/javascript” src=”//service.maxymiser.net/api/us/amil.com.br/df1463/mmapi.js”>

Este comando anexa o arquivo [ nmapi.js ] à página atual do mesmo provedor.

Ao acessar o endereço, você pode achar uma série de funções, minificadas ou não. Se você tiver que desminificar a biblioteca, poderá usar um dos utilitários oferecidos online, gratuitamente:

Já para minificar o código podemos usar o site do Dean Edwards:

As páginas a seguir foram testadas no site beautifier.io:

Código Minificado

Código deminificado. Observe que os nomes originais das variáveis não podem, obviamente ser recuperados.

Você pode, por exemplo, usar uma função que está em outro site (outro domínio, na verdade) para validar um cpf em sua própria página. Isso economiza um bocado de tempo de programação. Mas é aconselhável você copiar e analisar o código antes de usá-lo em sua própria aplicação. Procure por algum item que inviabilize seu uso, como:

  • O código tem copyright e não é livre;
  • Não há garantias de que aquele código estará sempre lá;
  • As funções executam instruções que podem vir a ser riscos de segurança.

Eu já vi páginas web que pararam de funcionar porque o programador simplesmente anexou código de outro domínio. Quando esse código mudou de endereço, um sistema importante perdeu a consistência. Definitivamente, não faça isso, mesmo que você esteja sob grande pressão. Seu gerente tem a obrigação de aliviar esse stress.

CONCEITOS DE OOP (Programação Orientada a Objeto)

Dois conceitos importantes a dominar em Programação Orientada a Objeto são classe e objeto. A programação orientada a objetos (seu acrônimo em inglês é OOP) tornou-se popular no final dos anos 1990, quando a linguagem C++, de Bjarne Stroolstrup, passou a ser “a linguagem” de programação dos profissionais de computação. Outras linguagens orientadas a objetos como Delphi, Eiffel e Python foram usadas, mas C++ foi uma febre entre programadores. Até hoje ela é importante na programação do produto Windows.

Bertrand Meyer [Meyer, 1997] definiu o que é “qualidade de programa” ou seja, as características que fazem com que um programa seja bom. Dentre elas está alterabilidade (ou “Manutenibilidade”). É a capacidade de alterar facilmente um programa quando os requisitos são alterados, por exemplo. A OOP vem de encontro a esse item de qualidade.

Fatores Externos de Qualidade de Software (Bertrand Meyer)

Correção: característica do software que realiza as tarefas como foram definidas em sua especificação de requisitos.
Robustez: um software é robusto se realiza as suas tarefas de forma correta mesmo quando submetido a condições anormais.
Extensibilidade: característica de um software poder ser facilmente adaptado a inclusões e alterações de requisitos.
Reusabilidade: característica de um software que pode ser reutilizado ao todo ou em parte por outros softwares.
Compatibilidade: facilidade de se combinar o software com outros softwares. Essa característica é importante porque raramente um software é construído sem interação com outros softwares.
Eficiência: refere-se ao bom uso que o software faz dos recursos de hardware, tais como memória e processadores.
Portabilidade: é a facilidade de se utilizar o software em diferentes ambientes de hardware e software.
Verificabilidade: é a facilidade de se preparar rotinas para se verificar a conformidade do software com os seus requisitos.
Integridade: é uma característica relacionada à segurança de dados, programas e documentos. Integridade é a habilidade de proteger tais componentes contra acessos não autorizados.
Facilidade de uso: também denominada usabilidade, é a facilidade com que o software pode ser aprendido e utilizado, inclusive por pessoas com deficiência.

Fatores de Internos de Qualidade de Software

Modularidade: característica de um software que é constituído por unidades denominadas módulos.
Legibilidade : deve ser possível para um programador qualquer ler e entender o programa.
Manutenibilidade: facilidade de realizar manutenção em um software.

A forma com um software é construído permite atingir os fatores internos de qualidade. Os fatores internos de qualidade permitem atingir os fatores externos de qualidade. A Orientação por Objetos é um paradigma cujas características permitem a obtenção de software modular, legível e de fácil manutenção.”1

Costuma-se usar ferramentas nos próprios programas’, que permitem obter um feedback do usuário a cada momento (geralmente no fim de uma sessão). Assim ele ou ela podem informar automaticamente sobre seu grau de satisfação com o produto. Consulte a metodologia NPS (net promoter score2) e a ferramenta wootric3.

1– Veja [ http://portal6.pbh.gov.br/dom/Files/unidade.pdf ]

2https://pt.wikipedia.org/wiki/Net_Promoter_Score

3https://www.wootric.com/

A programação orientada a objetos (OOP) foi criada no início da década de 1970 no Xerox Corporation’s Palo Alto Research Center1. A OOP nasceu para atender aos critérios de qualidade de software, para torná-los possíveis dentro do desenvolvimento e de uma etapa até então desprezada: a manutenção . [MEYER, 1997], citando Lientz e Swanson, observa os custos de manutenção de software (portanto quando já está teóricamente pronto) por assunto:

1http://www.dba-oracle.com/t_object_database_model.htm

AssuntoCusto %
Modificação de requisitos de usuários41,8
Mudanças no formato dos dados17,6
Correções de emergência12,4
Correções de rotina9,0
Mudanças de hardware6,2
Documentação5,5
Melhoria de eficiência4,0
Outros3,4

Estimou-se que os custos do processo de manutenção, chegavam a 70% do custo do software. A OOP nasceu, portanto, para baratear a manutenção. Vamos tomar o exemplo da mudança no formato de dados. Antes da OOP, quando um conjunto de dados se alterava, era preciso modificar várias partes do sistema: A impressão de relatórios, a exibição dos dados na tela, a gravação em meio físico, a recuperação, a crítica. Com a OOP, os dados sabem como realizar essas operações. Idealmente, uma modificação nos dados leva à alteração automática das operações em todo o sistema.

Classes e objetos

Para começar, OOP trabalha com classes. Uma classe define a estrutura, os tipos de dados que a estrutura contém e os métodos e comportamentos usados para manipular os dados. Quando definimos uma variável que faz parte de uma classe, temos um “objeto”1. Muitas linguagens de programação lidam de forma natural com isso JavaScript, por exemplo, adapta o conceito de função para criar classes e seus objetos.

1 – [MEYER, 1997]é uma excelente referência sobre o assunto. Veja os itens 1.3 a 2.6 da obra.

Imagine que você precisa fazer um programa para cadastrar armas portáteis. Em nossa definição, arma portátil é toda aquela que pode ser carregada por uma pessoa apenas. Vamos melhorar a definição: arma portátil é toda aquela que pode ser carregada por uma pessoa apenas, sem chamar a atenção de outras pessoas. Assim, um revólver, uma pistola, uma faca, um machado curto são armas portáteis. Suponha uma hierarquia entre essas armas:

  1. Armas portáteis
    1. Armas de fogo
      1. pistola
      2. revolver
    2. Armas de eletrochoque
      1. taser
      2. stunt gun
    3. Armas brancas
      1. faca
      2. punhal
      3. machado

A lista não é extensa e nem pretende ser. É apenas um exemplo bem simples. Suponha então que eu queira definir uma classe de “armas portáteis”, de acordo com a lista acima. Se eu definir a classe “Arma” tenho de incluir uma informação sobre o que é essa arma: Arma de fogo, eletrochoque ou branca. Assim, parece razoável que eu tenha um descritor “Tipo”, dando essa informação.

Regra#1 das classes: Toda classe precisa de um construtor, um método para criar seus objetos na memória.

class Arma {
constructor(Tipo, SubTipo) {
this.Tipo = Tipo;
this.SubTipo = SubTipo;
}
}
Exemplo em JavaScript

O trecho acima quer dizer que, na hora de criar um objeto da classe Arma, tenho de informar o tipo e o subtipo. O operador “this” serve para definir uma variável interna à classe. Ele quer dizer que estou falando do Tipo que é usado internamente ao objeto, e não o que é passado por parâmetro. Quer dizer também que a variável Tipo informada no parêntesis não será usada lá dentro da classe. Será usada outra variável de mesmo nome mas que não altera a primeira. O mesmo podemos dizer em relação a subtipo. Confuso ? Redundante ? Vou esclarecer. O construtor é chamado de método e dá as ordens para a criação adequada do objeto na memória. O segredo é usar o comando “new”. Vamos ver no console JavaScxript:

Criando a classe Arma() em JavaScript.
fogo
console.log(p.SubTipo)
revolver
var a=p.Tipo
undefined
a
“fogo”
Saída do programa JavaScript.

Note que todas as variáveis (ou objetos) criados à semelhança daquela classe são iguais em estrutura e métodos. Se eu mudar a definição da classe num programa, todos os objetos pertencentes a ela serão automaticamente alterados. É isso que Bertrand Meyer quer dizer em seu estudo. Assim, lá vem a regra#2:

Regra#2 das classes: Toda classe precisa ser modificável, sem alterar o resto do programa.

Essa regra é desafiadora. Imagine que você criou o seu cadastro de armas, com suas telas, com gravação de informação num banco de dados, com relatórios. Se o seu cliente muda de ideia sobre as informações que irão no cadastro, você precisará alterar o programa aquelas partes todas. Mas se você usar corretamente as características da OOP, só precisará alterar um trecho: a classe Armas. Isso porque a classe Armas tem seus métodos. Ela terá, por exemplo, um método para fazer relatório, um método para gravar dados no banco de dados (no caso de Java, por exemplo), um método para mostrar o cadastro numa tela de computador ou num celular etc. Assim, alterando a classe, não é preciso alterar mais nada. Já adianto que na teoria é fácil. Mas na prática é preciso muita disciplina.

Vamos supor que, no caso de armas de fogo, só possam existir pistolas e revólveres. E vamos supor também que pistolas só possam ser aquelas homologadas para uso das polícias com munição .40, enquanto revólveres sejam apenas de uso particular, com munição .38. Sabemos que essa não é a realidade, mas estamos fazendo uma simplificação. Nossa classe ficaria assim:

class Arma {
constructor(Tipo, SubTipo, Municao) {
this.Tipo = Tipo;
this.SubTipo = SubTipo;
this.Municao = function(SubTipo) {
var Municao = “”;
if (SubTipo == ”pistola”) { Municao = “.40” }
else if (SubTipo == ”revolver”) { Municao = “.38” }
else
{ Municao = “” }
return(Municao);
}; // function
}; // constructor
}; // class Arma
Alteração da classe em JavaScript.

Eu defini uma função que vai colaborar com a inicialização de todos os objetos daquela classe. Essa função é defMunicao() e cria dados automaticamente para qualquer objeto da classe.

Note que JavaScript não trabalha com classes do mesmo modo que C++, Smalltalk, ou Java. Ela usa uma adaptação através de funções que lhe dão o “estilo” de linguagem OOP.

Existe banco de dados orientado a objeto ?

Primeiro precisamos refinar a pergunta. Um banco de dados orientado a objeto OODBMS é aquele que não segue o modelo de linhas e colunas (ou t-uplas). ou seja, não segue o modelo relacional. Tal sistema torna bem fácil traduzir as especificações de modelos orientados a objetos (classes) para os métodos de armazenamento. Considerando que os modelos baseados em classe são criados numa ferramenta CASE (como o Sparx Systems / Enterprise Architect) e que não tenho visto modo de traduzir automaticamente isso para om OODBMS, a resposta à pergunta acima tem de ser: não. Apesar de tais bancos existirem em teste no âmbito das universidades, os bancos de dados mais usados são os relacionas Oracle, MySql, MariaDB e PostgreSQL Nenhum deles orientado a objeto. O ideal seria que o armazenamento e recuperação de dados do banco (ou persistência de dados, como dizem) fosse feito com as características da própria linguagem OOP, de modo transparente. A Oracle tem feito pesquisas nesse sentido com a linguagem Java e a tecnologia DAO (Data Access Object) desde 2001. Em 2016, a Oracle publicou artigo1 relacionado a OOP e a linguagem, PL/SQL.

Três dos fundamentos da tecnologia OO são classes, objetos e mensagens. Uma classe descreve um grupo de objetos que têm relacionamentos, comportamentos e também possuem propriedades semelhantes. Um objeto abrange dados e funções relacionados em um pacote completamente independente. Como os objetos são “moldados” a partir de uma definição de classe comum, cada instância de um objeto dentro de uma classe herda todos os mesmos comportamentos e definições de dados. O coração de um banco de dados orientado a objetos é a persistência de objetos, e é o processo de armazenamento e recuperação de objetos que compreende o coração do gerenciamento de dados do objeto.”2 Outro aspecto crucial é a compatibilidade de soluções OOP de persistência com aplicações antigas, baseadas puramente em DBMS. Uma promessa interessante que irá alterar o modo como os novos programas são feitos é o banco de dados não-relacional MongoDB. Em breve estará disponível mais uma obra desta série: “MONGODB DE ZERO A CEM POR CENTO”, falando desse notável produto.

1– Ver [Burleson, 2020]

2– Ibdem

Características das linguagens OOP

Segundo Meyer, uma linguagem orientada a classes (i.e. a objetos) precisa apresentar as seguintes características:

Noção de classe: A noção de classe deve ser o conceito central da linguagem. A noção de classe é introduzida em JavaScript na especificação ECMA Script 2015. Na verdade, números são classes; strings também. Tanto é verdade, que existem propriedades e métodos para números, por exemplo.
Afirmações: A linguagem deve tornar possível equipar uma classe com afirmações (pré-condições, pós-condições, e invariantes), baseadas em ferramentas para produzir documentação a partir dessas afirmações e, opcionalmente, monitorá-las em tempo de execução.
Módulos: As classes devem ser os únicos módulos disponíveis.
Classes como tipos: Todo tipo deve ser baseado em uma classe. Em JavaScript, os tipos de dados (inteiro, ponto flutuante, booleano, indefinido, null, string, array etc), apesar de também terem métodos de declaração que se assemelham aos das linguagens antigas, na verdade são definidos colo classes, havendo uma equivalência do método comum de declarar com o método de classe. No caso da linguagem, os tipos são classes pré-definidas. Mesmo os operadores aritméticos, são na verdade propriedades de classes, podendo ser representados também pelos símbolos mais tradicionais (*, /, +. – etc).
Computação baseada em características: A chamada de uma característica deve ser o mecanismo primária da computação.
Ocultamento da informação: Deve ser possível para o criador de uma classe especificar que uma característica está disponível para todos os clientes, para nenhum cliente ou para clientes específicos.
Tratamento de exceções: A linguagem precisa prover um mecanismo para recuperar-se de uma situação anormal não esperada. Parra atender a essa característica, o JavaScript usa as declarações throw, try, catch e finally. Iremos conhecê-las mais tarde.
Tipagem estática: Um sistema de tipos bem definido deve, impondo um número de tipos regras de declaração e compatibilidade, garantir a segurança do tipo em tempo de execução nos sistemas que aceita.
Genericidade: Deve ser possível escrever classes com parâmetros genéricos formais representando tipos arbitrários.
Herança simples: Deve ser possível definir uma classe como herdada de outra.
Herança múltipla: Deve ser possível para uma classe herdar quantas outras forem necessárias, com um mecanismo adequado para desambiguar conflitos de nomes.
Herança repetida: Regras precisas devem governar o destino dos recursos sob herança repetida, permitindo que os desenvolvedores escolham, separadamente para cada herança herdada repetidamente recurso, entre compartilhamento e replicação.
Genericidade restrita: O mecanismo de genericidade deve suportar a forma restrita.
Redefinição: Deve ser possível redefinir a especificação, assinatura e implementação de um recurso herdado.
Polimorfismo: Deve ser possível anexar entidades (nomes nos textos do software representando objetos de tempo de execução) para objetos de tempo de execução de vários tipos possíveis, sob o controle do sistema de tipos baseados em herança.
Dynamic binding: Chamar um recurso em uma entidade sempre deve acionar o recurso correspondente ao tipo do objeto de tempo de execução anexado, que não é necessariamente o mesmo em diferentes execuções da chamada.
Interrogação de tipo em tempo de execução: Deve ser possível determinar em tempo de execução se o tipo de um objeto está em conformidade com um tipo estaticamente determinado.