A methodology for the automated introduction of design patterns

M.O. Cinneide, P. Nixon
<span title="">1999</span> <i title="IEEE"> <a target="_blank" rel="noopener" href="https://fatcat.wiki/container/eqpb62kt7nhrfde7vi6wrw6wru" style="color: black;">Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM&#39;99). &#39;Software Maintenance for Business Change&#39; (Cat. No.99CB36360)</a> </i> &nbsp;
In reengineering legacy code it is frequently useful to introduce a design pattern in order to add clarity to the system and thus facilitate further program evolution. We show that this type of transformation can be automated in a pragmatic manner and present a methodology for the development of design pattern transformations. We address the issues of the definition of a starting point for the transformation, the decomposition of a pattern into minipatterns and the development of corresponding
more &raquo; ... initransformations that can introduce these minipatterns to a program. We argue that behaviour preservation is a key issue and develop a rigorous argument of this for each minitransformation we discover. The architecture of an existing software prototype is also discussed and the results of applying this methodology to develop a transformation for the Factory Method pattern are presented. Keywords: Software re-engineering and restructuring; legacy software; software evolution and modernisation; behaviour preservation; design patterns. ∀ e:ObjectCreationExpression ε creator s.t. e.classCreated() == product, e.containingMethod().name() == createP Name: ABSTRACT ACCESS Arguments: String creator: the name of the class to be updated. String product: the name of the product class. String infName: the name of the interface. String createP: the name of methods to be excluded.
<span class="external-identifiers"> <a target="_blank" rel="external noopener noreferrer" href="https://doi.org/10.1109/icsm.1999.792644">doi:10.1109/icsm.1999.792644</a> <a target="_blank" rel="external noopener" href="https://dblp.org/rec/conf/icsm/CinneideN99.html">dblp:conf/icsm/CinneideN99</a> <a target="_blank" rel="external noopener" href="https://fatcat.wiki/release/n6hiepc3rrbsdc7airioykqovq">fatcat:n6hiepc3rrbsdc7airioykqovq</a> </span>
<a target="_blank" rel="noopener" href="https://web.archive.org/web/20170810121625/https://www.scss.tcd.ie/publications/tech-reports/reports.99/TCD-CS-1999-18.pdf" title="fulltext PDF download" data-goatcounter-click="serp-fulltext" data-goatcounter-title="serp-fulltext"> <button class="ui simple right pointing dropdown compact black labeled icon button serp-button"> <i class="icon ia-icon"></i> Web Archive [PDF] <div class="menu fulltext-thumbnail"> <img src="https://blobs.fatcat.wiki/thumbnail/pdf/c8/23/c82300a8a4c28b0c6fd39d8f81c49c5141396e1b.180px.jpg" alt="fulltext thumbnail" loading="lazy"> </div> </button> </a> <a target="_blank" rel="external noopener noreferrer" href="https://doi.org/10.1109/icsm.1999.792644"> <button class="ui left aligned compact blue labeled icon button serp-button"> <i class="external alternate icon"></i> ieee.com </button> </a>