A formal approach to modeling and model transformations in software engineering