4 research outputs found

    Uso de reflexão para verificação de tipos dinâmicos em objetos Python

    Get PDF
    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

    Get PDF
    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

    Get PDF
    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

    REFLECTION IN OBJECT-ORIENTED PROGRAMMING

    No full text
    corecore