Um estudo quantitativo sobre o uso de herança e interface em sistemas Java

Detalhes bibliográficos
Ano de defesa: 2017
Autor(a) principal: Dantas, Carlos Eduardo de Carvalho lattes
Orientador(a): Maia, Marcelo de Almeida lattes
Banca de defesa: Macedo, Autran lattes, Sant'Anna, Cláudio Nogueira lattes
Tipo de documento: Dissertação
Tipo de acesso: Acesso aberto
Idioma: por
Instituição de defesa: Universidade Federal de Uberlândia
Programa de Pós-Graduação: Programa de Pós-graduação em Ciência da Computação
Departamento: Não Informado pela instituição
País: Brasil
Palavras-chave em Português:
Área do conhecimento CNPq:
Link de acesso: https://repositorio.ufu.br/handle/123456789/18665
http://dx.doi.org/10.14393/ufu.di.2017.147
Resumo: 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.
id UFU_0baff0aa26301f7e7c3495025df063e9
oai_identifier_str oai:repositorio.ufu.br:123456789/18665
network_acronym_str UFU
network_name_str Repositório Institucional da UFU
repository_id_str
spelling 2017-05-17T16:39:12Z2017-05-17T16:39:12Z2017-02-10DANTAS, 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.https://repositorio.ufu.br/handle/123456789/18665http://dx.doi.org/10.14393/ufu.di.2017.147O 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.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.Dissertação (Mestrado)porUniversidade Federal de UberlândiaPrograma de Pós-graduação em Ciência da ComputaçãoBrasilCNPQ::CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAOComputaçãoInterface de programação de aplicaçõesJava (Linguagem de programação de computador)Engenharia de SoftwareHerançaInterfacesMudanças corretivasCode SmellsEncapsulamentoCoesãoAcoplamentoGitHubSourceForgeInheritanceCorrective commitsEncapsulationCohesionCouplingUm estudo quantitativo sobre o uso de herança e interface em sistemas Javainfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisMaia, Marcelo de Almeidahttp://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4791753E8Macedo, Autranhttp://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4781728E0Sant'Anna, Cláudio Nogueirahttp://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4755862D6http://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4550849U3Dantas, Carlos Eduardo de Carvalho94info:eu-repo/semantics/openAccessreponame:Repositório Institucional da UFUinstname:Universidade Federal de Uberlândia (UFU)instacron:UFUTHUMBNAILEstudoQuantitativoUso.pdf.jpgEstudoQuantitativoUso.pdf.jpgGenerated Thumbnailimage/jpeg1355https://repositorio.ufu.br/bitstream/123456789/18665/4/EstudoQuantitativoUso.pdf.jpg329c99983850f195a1e0ca6822a8766bMD54ORIGINALEstudoQuantitativoUso.pdfEstudoQuantitativoUso.pdfDissertaçãoapplication/pdf10398377https://repositorio.ufu.br/bitstream/123456789/18665/1/EstudoQuantitativoUso.pdf3b399ea5145b338831bc62698e55b808MD51LICENSElicense.txtlicense.txttext/plain; charset=utf-81792https://repositorio.ufu.br/bitstream/123456789/18665/2/license.txt48ded82ce41b8d2426af12aed6b3cbf3MD52TEXTEstudoQuantitativoUso.pdf.txtEstudoQuantitativoUso.pdf.txtExtracted texttext/plain167249https://repositorio.ufu.br/bitstream/123456789/18665/3/EstudoQuantitativoUso.pdf.txt47118ba5f72c075990a0b34d1940360bMD53123456789/186652019-10-25 11:24:25.37oai:repositorio.ufu.br:123456789/18665w4kgbmVjZXNzw6FyaW8gY29uY29yZGFyIGNvbSBhIGxpY2Vuw6dhIGRlIGRpc3RyaWJ1acOnw6NvIG7Do28tZXhjbHVzaXZhLCBhbnRlcyBxdWUgbyBkb2N1bWVudG8gcG9zc2EgYXBhcmVjZXIgbm8gUmVwb3NpdMOzcmlvLiBQb3IgZmF2b3IsIGxlaWEgYSBsaWNlbsOnYSBhdGVudGFtZW50ZS4gQ2FzbyBuZWNlc3NpdGUgZGUgYWxndW0gZXNjbGFyZWNpbWVudG8gZW50cmUgZW0gY29udGF0byBhdHJhdsOpcyBkbyBlLW1haWwgIHJlcG9zaXRvcmlvQHVmdS5ici4KCkxJQ0VOw4dBIERFIERJU1RSSUJVScOHw4NPIE7Dg08tRVhDTFVTSVZBCgpBbyBhc3NpbmFyIGUgZW50cmVnYXIgZXN0YSBsaWNlbsOnYSwgby9hIFNyLi9TcmEuIChhdXRvciBvdSBkZXRlbnRvciBkb3MgZGlyZWl0b3MgZGUgYXV0b3IpOgoKYSkgQ29uY2VkZSDDoCBVbml2ZXJzaWRhZGUgRmVkZXJhbCBkZSBVYmVybMOibmRpYSBvIGRpcmVpdG8gbsOjby1leGNsdXNpdm8gZGUgcmVwcm9kdXppciwgY29udmVydGVyIChjb21vIGRlZmluaWRvIGFiYWl4byksIGNvbXVuaWNhciBlL291IGRpc3RyaWJ1aXIgbyBkb2N1bWVudG8gZW50cmVndWUgKGluY2x1aW5kbyBvIHJlc3Vtby9hYnN0cmFjdCkgZW0gZm9ybWF0byBkaWdpdGFsIG91IGltcHJlc3NvIGUgZW0gcXVhbHF1ZXIgbWVpby4KCmIpIERlY2xhcmEgcXVlIG8gZG9jdW1lbnRvIGVudHJlZ3VlIMOpIHNldSB0cmFiYWxobyBvcmlnaW5hbCwgZSBxdWUgZGV0w6ltIG8gZGlyZWl0byBkZSBjb25jZWRlciBvcyBkaXJlaXRvcyBjb250aWRvcyBuZXN0YSBsaWNlbsOnYS4gRGVjbGFyYSB0YW1iw6ltIHF1ZSBhIGVudHJlZ2EgZG8gZG9jdW1lbnRvIG7Do28gaW5mcmluZ2UsIHRhbnRvIHF1YW50byBsaGUgw6kgcG9zc8OtdmVsIHNhYmVyLCBvcyBkaXJlaXRvcyBkZSBxdWFscXVlciBvdXRyYSBwZXNzb2Egb3UgZW50aWRhZGUuCgpjKSBTZSBvIGRvY3VtZW50byBlbnRyZWd1ZSBjb250w6ltIG1hdGVyaWFsIGRvIHF1YWwgbsOjbyBkZXTDqW0gb3MgZGlyZWl0b3MgZGUgYXV0b3IsIGRlY2xhcmEgcXVlIG9idGV2ZSBhdXRvcml6YcOnw6NvIGRvIGRldGVudG9yIGRvcyBkaXJlaXRvcyBkZSBhdXRvciBwYXJhIGNvbmNlZGVyIMOgIFVuaXZlcnNpZGFkZSBGZWRlcmFsIGRlIFViZXJsw6JuZGlhIG9zIGRpcmVpdG9zIHJlcXVlcmlkb3MgcG9yIGVzdGEgbGljZW7Dp2EsIGUgcXVlIGVzc2UgbWF0ZXJpYWwgY3Vqb3MgZGlyZWl0b3Mgc8OjbyBkZSB0ZXJjZWlyb3MgZXN0w6EgY2xhcmFtZW50ZSBpZGVudGlmaWNhZG8gZSByZWNvbmhlY2lkbyBubyB0ZXh0byBvdSBjb250ZcO6ZG8gZG8gZG9jdW1lbnRvIGVudHJlZ3VlLgoKU2UgbyBkb2N1bWVudG8gZW50cmVndWUgw6kgYmFzZWFkbyBlbSB0cmFiYWxobyBmaW5hbmNpYWRvIG91IGFwb2lhZG8gcG9yIG91dHJhIGluc3RpdHVpw6fDo28gcXVlIG7Do28gYSBVbml2ZXJzaWRhZGUgRmVkZXJhbCBkZSBVYmVybMOibmRpYSwgZGVjbGFyYSBxdWUgY3VtcHJpdSBxdWFpc3F1ZXIgb2JyaWdhw6fDtWVzIGV4aWdpZGFzIHBlbG8gcmVzcGVjdGl2byBjb250cmF0byBvdSBhY29yZG8uCgpBIFVuaXZlcnNpZGFkZSBGZWRlcmFsIGRlIFViZXJsw6JuZGlhIGlkZW50aWZpY2Fyw6EgY2xhcmFtZW50ZSBvKHMpIHNldShzKSBub21lKHMpIGNvbW8gbyhzKSBhdXRvcihlcykgb3UgZGV0ZW50b3IgKGVzKSBkb3MgZGlyZWl0b3MgZG8gZG9jdW1lbnRvIGVudHJlZ3VlLCBlIG7Do28gZmFyw6EgcXVhbHF1ZXIgYWx0ZXJhw6fDo28sIHBhcmEgYWzDqW0gZGFzIHBlcm1pdGlkYXMgcG9yIGVzdGEgbGljZW7Dp2EuCg==Repositório InstitucionalONGhttp://repositorio.ufu.br/oai/requestdiinf@dirbi.ufu.bropendoar:2019-10-25T13:24:25Repositório Institucional da UFU - Universidade Federal de Uberlândia (UFU)false
dc.title.pt_BR.fl_str_mv Um estudo quantitativo sobre o uso de herança e interface em sistemas Java
title Um estudo quantitativo sobre o uso de herança e interface em sistemas Java
spellingShingle Um estudo quantitativo sobre o uso de herança e interface em sistemas Java
Dantas, Carlos Eduardo de Carvalho
CNPQ::CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO
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
title_short Um estudo quantitativo sobre o uso de herança e interface em sistemas Java
title_full Um estudo quantitativo sobre o uso de herança e interface em sistemas Java
title_fullStr Um estudo quantitativo sobre o uso de herança e interface em sistemas Java
title_full_unstemmed Um estudo quantitativo sobre o uso de herança e interface em sistemas Java
title_sort Um estudo quantitativo sobre o uso de herança e interface em sistemas Java
author Dantas, Carlos Eduardo de Carvalho
author_facet Dantas, Carlos Eduardo de Carvalho
author_role author
dc.contributor.advisor1.fl_str_mv Maia, Marcelo de Almeida
dc.contributor.advisor1Lattes.fl_str_mv http://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4791753E8
dc.contributor.referee1.fl_str_mv Macedo, Autran
dc.contributor.referee1Lattes.fl_str_mv http://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4781728E0
dc.contributor.referee2.fl_str_mv Sant'Anna, Cláudio Nogueira
dc.contributor.referee2Lattes.fl_str_mv http://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4755862D6
dc.contributor.authorLattes.fl_str_mv http://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4550849U3
dc.contributor.author.fl_str_mv Dantas, Carlos Eduardo de Carvalho
contributor_str_mv Maia, Marcelo de Almeida
Macedo, Autran
Sant'Anna, Cláudio Nogueira
dc.subject.cnpq.fl_str_mv CNPQ::CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO
topic CNPQ::CIENCIAS EXATAS E DA TERRA::CIENCIA DA COMPUTACAO
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
dc.subject.por.fl_str_mv 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
description 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.
publishDate 2017
dc.date.accessioned.fl_str_mv 2017-05-17T16:39:12Z
dc.date.available.fl_str_mv 2017-05-17T16:39:12Z
dc.date.issued.fl_str_mv 2017-02-10
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.citation.fl_str_mv 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.
dc.identifier.uri.fl_str_mv https://repositorio.ufu.br/handle/123456789/18665
dc.identifier.doi.pt_BR.fl_str_mv http://dx.doi.org/10.14393/ufu.di.2017.147
identifier_str_mv 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.
url https://repositorio.ufu.br/handle/123456789/18665
http://dx.doi.org/10.14393/ufu.di.2017.147
dc.language.iso.fl_str_mv por
language por
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.publisher.none.fl_str_mv Universidade Federal de Uberlândia
dc.publisher.program.fl_str_mv Programa de Pós-graduação em Ciência da Computação
dc.publisher.country.fl_str_mv Brasil
publisher.none.fl_str_mv Universidade Federal de Uberlândia
dc.source.none.fl_str_mv reponame:Repositório Institucional da UFU
instname:Universidade Federal de Uberlândia (UFU)
instacron:UFU
instname_str Universidade Federal de Uberlândia (UFU)
instacron_str UFU
institution UFU
reponame_str Repositório Institucional da UFU
collection Repositório Institucional da UFU
bitstream.url.fl_str_mv https://repositorio.ufu.br/bitstream/123456789/18665/4/EstudoQuantitativoUso.pdf.jpg
https://repositorio.ufu.br/bitstream/123456789/18665/1/EstudoQuantitativoUso.pdf
https://repositorio.ufu.br/bitstream/123456789/18665/2/license.txt
https://repositorio.ufu.br/bitstream/123456789/18665/3/EstudoQuantitativoUso.pdf.txt
bitstream.checksum.fl_str_mv 329c99983850f195a1e0ca6822a8766b
3b399ea5145b338831bc62698e55b808
48ded82ce41b8d2426af12aed6b3cbf3
47118ba5f72c075990a0b34d1940360b
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositório Institucional da UFU - Universidade Federal de Uberlândia (UFU)
repository.mail.fl_str_mv diinf@dirbi.ufu.br
_version_ 1792331551614173184