GDC 5.826 Thurs 3:30-4:30
|Room|| GDC 1.304
|Days & Time||Tuesday, Thursday 9:30am -- 11am
|Ground Rules||Code of Conduct and Academic Honesty|
|Your Grades||UT Blackboard (I wish we had something else!)|
Prerequisites: Minimum C- grade in CS 373 (Software Engineering). The UTCS course catalog also says CS 347 (databases) and CS 375 (compilers) are required for this course --- this is wrong. It would be great if you took these courses concurrently or later, but databases and compilers are NOT required. Bottom line:
You must know how to program in Java; if Java is new to you, do not take this course! The more experience you have in programming, the more you will learn and appreciate this course.
Overview. Software design and construction is not hacking; it is governed by fundamental concepts. We see these concepts at work in Model Driven Engineering (MDE), which gives us a general way to think about software design and construction -- not as a mass of spaghetti code, but as a principled collection of ideas architected in a thoughtful way. MDE deals with the creation of models and transformations of these models to other models, eventually yielding executables (yet other models).
This is rather abstract, but if you think about it, we express a program in the Java language (that's our concrete model of this program). The javac compiler transforms source code to bytecode (i.e. it maps a Java representation of a program to a corresponding representation of that program in bytecode). javadoc, as another example, maps Java source to html (both are models). Object oriented refactorings map source code to refactored source code. There are even refactorings that map bytecodes to bytecodes.
These are just a few examples of software engineering representations of programs and the tools that transform them from one representation to another. Virtually all of software design deals with the creation of models (program representations) and their transformation into other representations. Most work in Engineering (with a capital "E") deals with model development -- ex. Boeing creates and analyzes models of aircraft long before they actually build a physical plane. Similarly, the software next generation Space Shuttle is being built solely from models; no one is writing code! (These models are transformed to ugly C++ by commercial tools and then commercial C++ compilers transform source into executables).
Goals. The goals of this course are to give students the basics for what we as programmers and system architects are doing, and how to reason about program design and construction. This course will:
teach you basic skills in reasoning about and expressing software design,
give you experience in writing programs to exercise these skills,
expose you to the fundamental ideas of software design,
provide an insight on where software design technology is headed, and
give you a framework to understand what Software Engineering will become in the future.
The course includes lectures on the following topics: UML models and metamodels, metamodel constraints, Categories, Refactorings, Object Oriented Design Patterns, Architectural Patterns, Parallel Architectures, and Service Oriented Architectures. And of course, concepts from MDE which all of the above are special cases. The course covers examples from compilers and databases (so if you have any experience writing compilers or databases, you're that much further ahead than others. A course on compilers or databases is not a prerequisite, but it is good to have in any case).
As this is gateway course to further undergraduate courses in CS on Software Development, there will be many small programming assignments and written homework assignments.
PPTX files of each lecture will be posted after class. (I change the notes every time I teach the course). Links to the PPTX files are listed in the syllabus below. Should you choose to create a hard copy of these files, do not use CS printers -- take the files to Kinkos. I have created several instructional web pages with accompanying .AVI or .MOV videos. Note: The .AVI videos work only in a Windows-based environment. The .MOV were converted from .AVI files and (unfortunately) are not as sharp.
Lecture material is taken from the following texts, which are NOT required for this course. All of them are worth having in a library, but often, much of their content is posted for free on the web.
A useful list of web pages are collected below:
SourceMaking.com -- for design patterns, anti-patterns, refactorings, and UML
YUML -- this is a neat, free, web-based tool for drawing UML diagrams
All programming assignments (except one) are in Java. We will be using the following software, all of which is free to UTCS students, and all of which has been installed in the UTCS Microlab, which is in ENS 1 & 2, and PAI 5.38. The following is for Windows Platforms. If you use Apple machines, well, I will try to help as much as I can, but no promises!
Microsoft Visio 2010/2013 -- for drawing UML diagrams. (Course notes use 2010, which is not compatible with 2013, not that it should matter to you). If you are a CS student, you can gain access to Visio via Software Downloads, read the MSDN/AA agreement, click the secure download site link, and follow the instructions. For ECE students, do the same at the ECE-MSDN/AA web page.
VLC Media Player -- to view .MOV videos shown in class. (You can use Windows Media Player, but its video resolution is awful). No need for this software if you are a Mac user.
SWI Prolog -- for writing metamodel constraints