4 research outputs found
Uso de reflexão para verificação de tipos dinâmicos em objetos Python
Atualmente, cada vez mais os sistemas computacionais demonstram-se importantes para a sociedade, observada a quantidade de atividades realizadas com o auxílio dessas ferramentas. Um motivo para esse sucesso refere-se a possibilidade de implementação de diferentes algoritmos usando linguagens de programação, abstraindo a complexidade da máquina que é programada. Essas linguagens podem ser analisadas em diferentes aspectos, como por exemplo, o método de implementação, os paradigmas de programação, e seu sistema de tipos. Esse último define o comportamento dos dados e seus tipos em uma linguagem. Os sistemas de tipos são classificados, tipicamente, sob dois aspectos: tipagem estática/dinâmica e tipagem forte/fraca. Considerados os aspectos anteriores, outro detalhe interessante presente em algumas linguagens, refere-se à habilidade de realizar reflexão, ou metaprogramação. No contexto da computação, reflexão refere-se à capacidade de um sistema em conhecer a si próprio e o ambiente no qual está inserido, sendo capaz de manipulá-lo. É uma espécie de “programação sobre a programação”, onde utiliza-se informações referente ao próprio código e ambiente da linguagem para programar. Usualmente, o recurso é implantado junto ao modelo de orientação a objetos da linguagem. Sendo assim, o presente trabalho tem como objetivo discutir a possibilidade de usar recursos reflexivos na linguagem Python, visando realizar a checagem de tipos em objetos em uma linguagem de tipagem dinâmica. Como justificativa, cita-se que devido ao fato da tipagem dinâmica associar os tipos de dados no instante da execução do programa, erros como atribuição do tipo incorreto podem ocorrer e comprometer o sistema em tempo de execução. Além disso, Python foi escolhido por atender aos critérios de tipagem dinâmica, reflexão e orientação a objetos, bem como por ser uma linguagem de fácil aprendizado. A metodologia aplicada consiste na realização de uma pesquisa bibliográfica e uma pesquisa exploratória, objetivando desenvolver um mecanismo reflexivo para checagem de tipos em objetos. Dessa forma, como resultado foi possível desenvolver um modelo reflexivo simples utilizando o recurso de anotações do Python, onde um método genérico é capaz de verificar a coerência de tipos simples entre as definições e associações de dados. Com isso, por exemplo, pode-se validar os tipos dos dados associados aos objetos na hora de sua instanciação, retornando um aviso de erro caso exista inconsistência. Dessa forma, conclui-se ser possível utilizar recursos de metaprogramação para verificação de tipos em uma linguagem de tipagem dinâmica como Python. Além disso, destaca-se a possibilidade de criação de um modelo genérico de abstração para realizar essa funcionalidade. Por fim, como trabalhos futuros cita-se: Aprimoramento do modelo para tipos complexos – como listas; aplicação do mesmo conceito em outras linguagens similares; implantação de um sistema real com o recurso em questão, analisando os impactos positivos e negativos do modelo
Acesso remoto dinâmico e seguro a bases de dados com integração de políticas de acesso suave
The amount of data being created and shared has grown greatly in recent
years, thanks in part to social media and the growth of smart devices.
Managing the storage and processing of this data can give a competitive edge
when used to create new services, to enhance targeted advertising, etc. To
achieve this, the data must be accessed and processed. When applications
that access this data are developed, tools such as Java Database Connectivity,
ADO.NET and Hibernate are typically used. However, while these tools aim to
bridge the gap between databases and the object-oriented programming
paradigm, they focus only on the connectivity issue. This leads to increased
development time as developers need to master the access policies to write
correct queries. Moreover, when used in database applications within noncontrolled
environments, other issues emerge such as database credentials
theft; application authentication; authorization and auditing of large groups of
new users seeking access to data, potentially with vague requirements;
network eavesdropping for data and credential disclosure; impersonating
database servers for data modification; application tampering for unrestricted
database access and data disclosure; etc.
Therefore, an architecture capable of addressing these issues is necessary to
build a reliable set of access control solutions to expand and simplify the
application scenarios of access control systems. The objective, then, is to
secure the remote access to databases, since database applications may be
used in hard-to-control environments and physical access to the host
machines/network may not be always protected. Furthermore, the authorization
process should dynamically grant the appropriate permissions to users that
have not been explicitly authorized to handle large groups seeking access to
data. This includes scenarios where the definition of the access requirements is
difficult due to their vagueness, usually requiring a security expert to authorize
each user individually. This is achieved by integrating and auditing soft access
policies based on fuzzy set theory in the access control decision-making
process. A proof-of-concept of this architecture is provided alongside a
functional and performance assessment.A quantidade de dados criados e partilhados tem crescido nos últimos anos,
em parte graças às redes sociais e à proliferação dos dispositivos inteligentes.
A gestão do armazenamento e processamento destes dados pode fornecer
uma vantagem competitiva quando usados para criar novos serviços, para
melhorar a publicidade direcionada, etc. Para atingir este objetivo, os dados
devem ser acedidos e processados. Quando as aplicações que acedem a
estes dados são desenvolvidos, ferramentas como Java Database
Connectivity, ADO.NET e Hibernate são normalmente utilizados. No entanto,
embora estas ferramentas tenham como objetivo preencher a lacuna entre as
bases de dados e o paradigma da programação orientada por objetos, elas
concentram-se apenas na questão da conectividade. Isto aumenta o tempo de
desenvolvimento, pois os programadores precisam dominar as políticas de
acesso para escrever consultas corretas. Além disso, quando usado em
aplicações de bases de dados em ambientes não controlados, surgem outros
problemas, como roubo de credenciais da base de dados; autenticação de
aplicações; autorização e auditoria de grandes grupos de novos utilizadores
que procuram acesso aos dados, potencialmente com requisitos vagos; escuta
da rede para obtenção de dados e credenciais; personificação de servidores
de bases de dados para modificação de dados; manipulação de aplicações
para acesso ilimitado à base de dados e divulgação de dados; etc.
Uma arquitetura capaz de resolver esses problemas é necessária para
construir um conjunto confiável de soluções de controlo de acesso, para
expandir e simplificar os cenários de aplicação destes sistemas. O objetivo,
então, é proteger o acesso remoto a bases de dados, uma vez que as
aplicações de bases de dados podem ser usados em ambientes de difícil
controlo e o acesso físico às máquinas/rede nem sempre está protegido.
Adicionalmente, o processo de autorização deve conceder dinamicamente as
permissões adequadas aos utilizadores que não foram explicitamente
autorizados para suportar grupos grandes de utilizadores que procuram aceder
aos dados. Isto inclui cenários em que a definição dos requisitos de acesso é
difícil devido à sua imprecisão, geralmente exigindo um especialista em
segurança para autorizar cada utilizador individualmente. Este objetivo é
atingido no processo de decisão de controlo de acesso com a integração e
auditaria das políticas de acesso suaves baseadas na teoria de conjuntos
difusos. Uma prova de conceito desta arquitetura é fornecida em conjunto com
uma avaliação funcional e de desempenho.Programa Doutoral em Informátic
An investigation of students' knowledge, skills and strategies during problem solving in objectoriented programming
The object-oriented paradigm is widely advocated and has been used in South African
universities since the late 1990s. Object-oriented computer programming is based on the
object-oriented paradigm where objects are the building blocks that combine data and
methods in the same entity.
Students' performance in object-oriented programming (OOP) is a matter of concern. In
many cases they lack the ability to apply various supportive techniques in the process of
programming. Efficient knowledge, skills and strategies are required during problem solving
to enhance the programming process. It is often assumed that students implicitly and
independently master these high-level knowledge, skills and strategies, and that teaching
should focus on programming content and coding structures only. However, to be successful
in the complex domain of OOP, explicit learning of both programming and supportive
cognitive techniques is required.
The objective of this study was to identify cognitive, metacognitive and problem-solving
knowledge, skills and strategies used by successful and unsuccessful programmers in OOP.
These activities were identified and evaluated in an empirical research study. A mixed
research design was used, where both qualitative and quantitative methods were applied to
analyse participants' data. As a qualitative research practice, grounded theory was applied
to guide the systematic collection of data and to generate theory.
The findings suggest that successful programmers applied significantly more cognitive-,
metacognitive- and problem-solving knowledge, skills and strategies, also using a greater
variety, than the unsuccessful programmers. Since programming is complex, we propose a
learning repertoire based on the approaches of successful programmers, to serve as an
integrated framework to support novices in learning OOP. Various techniques should be
used during problem solving and programming to meaningfully construct, explicitly reflect on,
and critically select appropriate knowledge, skills and strategies so as to better understand,
design, code and test programs. Some examples of teaching practices are also outlined as
application of the findings of the study.Mathematical SciencesPhD. (Nathematics, Science and Tecnical Education