Our research on model-driven engineering develops languages and tools to express complex systems by describing their essential properties, often within a restricted domain, while automating or providing automated assistance to generate or synthesize an efficient implementation of the system.
- Product Line Engineering
- Feature Oriented Programming. Program Refinement.
- Program Synthesis
- Generic Algorithm Theories. Problem Specification. Automatic Programming.
- Component Engineering
- Modularity. Modular Proofs. Design Patterns.
- Domain-Specific Languages
- Domain Modeling. Metamodels. Formal Semantics. Language Integration.
- Partial Evaluation. Algorithm/Representation Selection.
- User Interfaces. Security. Data Abstraction. Enterprise Applications. Databases. Physics Simulation.
- CS 345 -- Undergraduate Programming Languages
- CS 345H -- Undergraduate Programming Languages: Honors
- CS 347 -- Undergraduate Database Systems
- CS 371S -- Object-Oriented Software Development
- CS 378 -- Software Design
- CS 386D -- Graduate Database Systems
- CS 386L -- Graduate Programming Languages
- CS 392F -- Feature Oriented Programming
- CS 394P -- Automatic Programming