Please use this identifier to cite or link to this item:
https://repositorio.ufu.br/handle/123456789/18665
Document type: | Dissertação |
Access type: | Acesso Aberto |
Title: | Um estudo quantitativo sobre o uso de herança e interface em sistemas Java |
Author: | Dantas, Carlos Eduardo de Carvalho |
First Advisor: | Maia, Marcelo de Almeida |
First member of the Committee: | Macedo, Autran |
Second member of the Committee: | Sant'Anna, Cláudio Nogueira |
Summary: | O recurso de herança é uma das principais características do paradigma de Orientação a Objetos. Contudo, trabalhos anteriores recomendam cuidado quanto ao seu uso, sugerindo alternativas em Java como a adoção de composição com implementação de interfaces. Apesar de ser um tema bem estudado, ainda há pouco conhecimento se estas recomendações foram amplamente adotadas pelos desenvolvedores de maneira geral. Este trabalho possui como objetivo avaliar como os recursos de herança e interface têm sido empregados em Java, comparando sistemas mais recentes com antigos, e também versões de cada sistema em épocas distintas. Os indicadores avaliados foram a quantidade de mudanças corretivas dos sistemas, quebras de encapsulamento pelo uso do operador instanceof, medidas de coesão, acoplamento e ocorrências de code smells. Por fim, foi realizada uma medição sobre o quão frequente os recursos de herança ou interface são adicionados ou removidos das classes, e as motivações pelas quais os desenvolvedores executam estes procedimentos. Foram analisados 1.656 sistemas open-source construídos entre 1997 e 2013, todos hospedados nos repositórios GitHub e SourceForge. Foi constatado que os desenvolvedores ainda utilizam herança primariamente como um recurso para reaproveitamento de código, motivados pela necessidade de evitar duplicidade de código-fonte. Em projetos mais recentes, as classes na hierarquia de herança apresentaram menos mudanças corretivas e as subclasses fizeram menos uso do operador instanceof. No entanto, à medida que evoluem, as classes na hierarquia de herança tendem a se tornar complexas na medida em que as mudanças ocorrem. As classes que implementam interfaces mostraram pouca relação com as suas respectivas interfaces implementadas, e foram observados indícios de que este recurso ainda é subutilizado. Estes resultados mostram que ainda existe alguma falta de conhecimento sobre o uso de práticas adequadas orientadas a objetos, o que reforça a necessidade de formação de desenvolvedores sobre como projetar melhores classes. |
Abstract: | Inheritance is one of the main features in the object-oriented paradigm (OOP). Nonetheless, previous work recommend carefully using it, suggesting alternatives in Java such as the adoption of composition with implementation of interfaces. Despite of being a well-studied theme, there is still little knowledge if such recommendations have been widely adopted by developers in general. This work aims at evaluating how the inheritance and interface resources have been used in Java, comparing new projects with older ones, and also the different releases of projects. Evaluated indicators were the number of corrective changes of the projects, encapsulation breaks by the use of instanceof operator, measures of cohesion, coupling and occurrence of code smells. We also studied how often inheritance or interface features are added or removed from classes, and motivations by which developers perform such procedure. A total of 1,656 open-source projects built between 1997 and 2013, all hosted in the repositories GitHub and SourceForge, were analyzed. We observed developers still use inheritance primarily as a resource for code reuse, motivated by the need to avoid duplicity of source code. In newer projects, classes in inheritance hierarchy had fewer corrective changes and subclasses had fewer use of the instanceof operator. However, as they evolve, classes in inheritance hierarchy tend to become complex as changes occur. Classes implementing interfaces have shown little relation to the interfaces, and there is indication that they are still underutilized. These results show there is still some lack of knowledge about the use of adequate object- oriented practices, which reinforces the need for training developers on how to design better classes. |
Keywords: | Computação Interface de programação de aplicações Java (Linguagem de programação de computador) Engenharia de Software Herança Interfaces Mudanças corretivas Code Smells Encapsulamento Coesão Acoplamento GitHub SourceForge Inheritance Corrective commits Encapsulation Cohesion Coupling |
Area (s) of CNPq: | CNPQ::CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO |
Language: | por |
Country: | Brasil |
Publisher: | Universidade Federal de Uberlândia |
Program: | Programa de Pós-graduação em Ciência da Computação |
Quote: | DANTAS, Carlos Eduardo de Carvalho. Um estudo quantitativo sobre o uso de herança e interface em sistemas Java. 2017. 94 f. Dissertação (Mestrado em Ciência da Computação) - Universidade Federal de Uberlândia, Uberlândia, 2017. |
Document identifier: | http://dx.doi.org/10.14393/ufu.di.2017.147 |
URI: | https://repositorio.ufu.br/handle/123456789/18665 |
Date of defense: | 10-Feb-2017 |
Appears in Collections: | DISSERTAÇÃO - Ciência da Computação |
Files in This Item:
File | Description | Size | Format | |
---|---|---|---|---|
EstudoQuantitativoUso.pdf | Dissertação | 10.15 MB | Adobe PDF | View/Open |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.