ABSTRACT
Object-oriented (OO) programming languages prevail in the development of enterprise software, but they do not particularly support the implementation of software which includes solving complicated search problems with dynamically appearing constraints, e. g. as found in logistics. Such problems could be tackled by implementing the main business logic in e. g. Java and the search in a constraint-logic language. However, integrating both aspects is clumsy.
Thus, we propose the constraint-logic OO language Muli. It facilitates an integrated implementation of applications that use both aspects. Muli extends Java by logic variables and encapsulated search. Its implementation is based on a symbolic Java virtual machine and constraint solvers. Outside of search regions, Muli behaves just like Java.
We motivate the benefits of integrating object-oriented programming and constraint-logic programming and introduce concepts that are required to achieve a seamless integration. We also describe our implementation of these concepts and discuss our approach.
- Sergio Antoy and Andy Jost. 2016. A New Functional-Logic Compiler for Curry: Sprite. In LOPSTR. arXiv:1608.04016Google Scholar
- Bernd Braßel, Michael Hanus, Björn Peemöller, and Fabian Reck. 2011. KiCS2: A New Compiler from Curry to Haskell. Functional and Constraint Logic Programming 6816 (2011), 1--18. Google ScholarDigital Library
- Enrico Denti, Andrea Omicini, and Alessandro Ricci. 2005. Multi-paradigm Java-Prolog integration in tuProlog. Science of Computer Programming 57, 2 (2005), 217--250. Google ScholarDigital Library
- J. Doyle and C. Meudec. 2003. IBIS: an Interactive Bytecode Inspection System, using symbolic execution and constraint logic programming. 2nd PPPJ (2003), 55--58. Google ScholarDigital Library
- Torbjörn Ekman and Görel Hedin. 2007. The JastAdd extensible Java compiler. In OOPSLA. 1--18. Google ScholarDigital Library
- Marko Ernsting, Tim A. Majchrzak, and Herbert Kuchen. 2012. Test Case Generation and Dynamic Mixed-Integer Linear Arithmetic Constraint Solving. In 21st WFLP.Google Scholar
- Jacob Feldman. 2012. JSR 331: Constraint Programming API. (2012). https://jcp.org/en/jsr/detail?id=331Google Scholar
- James Gosling and et al. 2015. The Java® Language Specification - Java SE 8 Edition. (2015). https://docs.oracle.com/javase/specs/jls/se8/jls8.pdf Google ScholarDigital Library
- Michael Hanus. 1997. A Unified Computation Model for Functional and Logic Programming. In POPL 97. 80--93. Google ScholarDigital Library
- M Hanus, H Kuchen, J J Moreno-Navarro, JR Votano, M Parham, and LH Hall. 1995. Curry: A Truly Functional Logic Language. ILPS'95 Workshop on Visions for the Future of Logic Programming (1995), 95--107.Google Scholar
- Goh Kondoh and Tamiya Onodera. 2008. Finding bugs in Java Native Interface programs. ISSTA '08 (2008), 109. Google ScholarDigital Library
- Krzysztof Kuchcinski. 2003. Constraints-driven scheduling and resource assignment. ACM Transactions on Design Automation of Electronic Systems 8, 3 (2003), 355--383. Google ScholarDigital Library
- Christoph Lembeck, Rafael Caballero, Roger A. Müller, and Herbert Kuchen. 2004. Constraint Solving for Generating Glass-Box Test Cases. In Proceedings WFLP '04. 19--32.Google Scholar
- Tim Lindholm, Frank Yellin, Gilad Bracha, and Alex Buckley. 2015. The Java® Virtual Machine Specification - Java SE 8 Edition. (2015). https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf Google ScholarDigital Library
- Kenneth C Louden. 1993. Programming Languages: Principles and Practice. Wadsworth Publ. Co., Belmont, CA, USA. Google ScholarDigital Library
- Wolfgang Lux and Herbert Kuchen. 1999. An Efficient Abstract Machine for Curry. In Informatik '99 - Informatik überwindet Grenzen, K Beiersdörfer, G Engels, and W Schäfer (Eds.). Springer Verlag, 390--399.Google Scholar
- T. A. Majchrzak and H. Kuchen. 2009. Automated Test Case Generation Based on Coverage Analysis. In 2009 Third IEEE International Symposium on Theoretical Aspects of Software Engineering. 259--266. Google ScholarDigital Library
- Tim A Majchrzak and Herbert Kuchen. 2011. Logic Java: Combining Object-Oriented and Logic Programming. In WFLP. 122--137. Google ScholarDigital Library
- F. G. McCabe. 1992. Logic and Objects. Prentice Hall. Google ScholarDigital Library
- Erik Meijer, Brian Beckman, and Gavin Bierman. 2006. LINQ: Reconciling Objects, Relations and XML in the .NET Framework. In ACM SIGMOD International Conference on Management of data. 706. Google ScholarDigital Library
- Chris Moss. 1994. Prolog++ - the power of object-oriented and logic programming. Addison-Wesley. Google ScholarDigital Library
- Martin Odersky, Philippe Altherr, Vincent Cremet, Gilles Dubochet, Burak Emir, Philipp Haller, Stéphane Micheloud, Nikolay Mihaylov, Adriaan Moors, Lukas Rytz, Michel Schinz, Erik Stenman, and Matthias Zenger. 2017. Scala Language Specification. (2017). http://www.scala-lang.org/files/archive/spec/2.12/Google Scholar
- OptaPlanner Team. 2017. OptaPlanner User Guide, Version 7.0.0. https://docs.optaplanner.org/7.0.0.Final/optaplanner-docs/htmlGoogle Scholar
- Charles Prud'homme, Jean-Guillaume Fages, and Xavier Lorca. 2016. Choco Documentation. TASC, INRIA Rennes. http://www.choco-solver.orgGoogle Scholar
- David Renshaw. 2017. Seer: Symbolic Execution Engine for Rust. (2017). https://github.com/dwrensha/seerGoogle Scholar
- Randall Scott. 2010. A Guide to Artificial Intelligence with Visual Prolog. Outskirts Press. Google ScholarDigital Library
- Ehud Shapiro and Akikazu Takeuchi. 1983. Object oriented programming in Concurrent Prolog. New Generation Computing 1, 1 (1983), 25--48.Google ScholarDigital Library
- Stack Overflow. 2017. Developer Survey Results 2017. (2017). https://insights.stackoverflow.com/survey/2017Google Scholar
- Nikolai Tillmann and Jonathan de Halleux. 2008. Pex: White Box Test Generation for .NET. In 2nd International Conference on Tests and Proofs. 134--153. Google ScholarDigital Library
- TIOBE Software BV. 2017. TIOBE Index. (2017). https://www.tiobe.com/tiobe-index/Google Scholar
- Markus Triska. 2012. The Finite Domain Constraint Solver of SWI-Prolog. In FLOPS (LNCS), Vol. 7294. 307--316. Google ScholarDigital Library
- Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft. 2014. Java 8 in Action: Lambdas, Streams, and Functional-style Programming. Manning Publications Co., Greenwich, CT. Google ScholarDigital Library
- Peter Van Roy, Per Brand, Denys Duchier, Seif Haridi, Christian Schulte, and Martin Henz. 2003. Logic programming in the context of multiparadigm programming: the Oz experience. Theory and Practice of Logic Programming 3, 6 (2003), 717--763. arXiv:cs/0208029 Google ScholarDigital Library
- David H. D. Warren. 1983. An Abstract Prolog Instruction Set. Technical Report. SRI International, Menlo Park.Google Scholar
Index Terms
- A constraint-logic object-oriented language
Recommendations
Constraint-logic object-oriented programming for test case generation
SAC '22: Proceedings of the 37th ACM/SIGAPP Symposium on Applied ComputingThe constraint-logic object-oriented programming (CLOOP) language Muli extends Java 8 by features from constraint-logic programming such as built-in search. We have extended Muli such that it is now ideally suited to implement test case generators based ...
Constraint-Based Object-Oriented Programming
Constraint programming (CP) is a young but rapidly developing technology that supports the modeling and solution of a wide range of planning, scheduling, search, and optimization problems. The integration of CP concepts into languages from other ...
Structured Traversal of Search Trees in Constraint-Logic Object-Oriented Programming
Declarative Programming and Knowledge ManagementAbstractIn this paper, we propose an explicit, non-strict representation of search trees in constraint-logic object-oriented programming. Our search tree representation includes both the non-deterministic and deterministic behaviours of executing an ...
Comments