Programming Skills - 4003-561-01 / 4003-714-01


C#, .NET, and Design Patterns

$Revision: 1.36 $

Fall 20111
Instructor: James Heliotis

Goals

...for Programming Skills in General

The goal of this course is to introduce the student to a programming paradigm and an appropriate programming language chosen from those that are currently important in industry or that show high promise of becoming important. A significant portion of the learning curve occurs through programming assignments with exemplary solutions discussed later in class.

With the approval of the program coordinator the course can be taken for credit more then once, provided each instance deals with a different paradigm and language.

...for the C# Instance

This instance of the course will develop the students' skills in developing software for the C# programming language, and through this language, the Microsoft Visual Studio development environment and .NET execution environment. Various programming styles appropriate for C#, with an emphasis on design patterns, are an integral part of the course.

Experience and skill in programming in Java, or at least object-oriented features of C++, is essential. The beginning of the course will move quite quickly based on this assumption.

Textbook

The text on file for this course is Visual C# 2010 How To Program . Like most books on C#, it is not a perfect fit, as it is too much about how-to-do-what-one-usually-does-without-thinking and not enough deep conceptual material. I will not be requiring that you buy the book, but I chose it because it appeared to be better as a reference than some other books in its genre. There are also additional on-line chapters available to you when you purchase the hard copy.

On the other hand, you should get by very well just by having a C# reference and by attending classes. There is C# 2010 by Joel Murach and also a new version of C# Precisely by P. Sestoft and Henrik I. Hansen due out in late 2011. As mentioned in the Reading Suggestions below, the Microsoft Developer's Network is a great on-line resource, too. Discussion boards on mycourses will also be provided so that we can all help each other out.

Homework Assignments

Lab assignments are to be determined. Depending on the difficulty, the number of labs may be adjusted.

Test Study Guides

There will be three short tests in this course. Study guides for them will appear in this section.

Useful Links

Please notify us if you have any you'd like added.

Odds and Ends from Lecture

Axel Schreiner's Reading Suggestions

csharp-online.net

Command Line Options for Microsoft's csc

standard LINQ operations document (PDF)

C# Little Wonders by James Michael Hare

The WPF Tutorial by Christian Moser

The Mono Project: bringing .NET to other platforms

Many of the patterns covered in this course are from the seminal "Gang Of Four" book published in 1995. There is a good online resource for those patterns here.

Free eBooks! (more will be added)

Students: Please Contribute!

I strongly encourage students to send me information on their favorite books and on-line resources.

Graded Activities

Laboratory homework assignments are due on Thursdays and are announced at least one week in advance.

Three one-hour tests will be administered on weeks 3, 7, and 11 (finals week). Tests 2 and 3 may include material from the earlier tests.

All eight graded activities count equally toward your grade.

Contributions to the course, including participation in class and on the discussion forums, although not a formal part of the grade, could be an influence in borderline situations when the final grade is determined.

Graduate Students

Those persons enrolled in 4005-714 must do an additional assignment. This involves a demonstration of a technology related to .NET or C# that we did not cover in class. It is a team project on which up to three students will be allowed to work, depending on the scope of the work.

Here are some possibilities:

  1. Installation and use of MONO, and how it compares to Windows/.NET
  2. Other .NET languages, e.g., VisualBasic(easy), Managed C++, F# (unless covered in class), IronPython
  3. Interoperability of languages within .NET
  4. In-depth discussion of advanced libraries that come with C#/.NET
  5. Source code control with VisualStudio
  6. Silverlight
  7. Remote Object Invocation
  8. Attributes for C#
  9. Using LINQ with databases
  10. Intermediate/Advanced XAML

The students must submit a proposal for their topic and plan of work to the instructor by email. When the plan is approved, the student or team will be added to a the presentation schedule in or around the 10th week of class (see below). After the presentation, the student or team will submit their written documentation (most likely slides, source code files, and instructions) for grading.

Schedule

Here is the planned topic, test broken down by week number. This plan may change, but if it does it will show here and be announced by email ahead of time. Homework assignments will also be added here as the term progresses.

Week# Lecture Topics Homework Assignments due Thursday of following week Test Dates
Wednesdays
Pertinent Information
1 Course format and expectations
Programming environments
C# OO programming basics
Hash Table

2 Model-View-Controller
Observer Design Pattern
GUI programming -- windows forms and/or presentation framework
Design patterns vs. Visual Studio
Assemblies
Language interoperation
    MSDN entry on Observer Pattern

Info on XAML
3 T9-like Texting  Test 3
4 Functional Programming and Delegates
Web applications and Silverlight
 
Silverlight video
5 Web services
Factory patterns
Events
The Texting Problem on a Web Service
on Silverlight and Web Services
(simpler instructions that should suffice for HW 3)
6 LINQ, anonymous objects
Catch up / Fill in gaps
  • casting vs. as
  • var
  • Tuple classes
  • ...
 

7 Nullable objects, structs   Test 2
8 Threads.
Consumer/producer patterns
 

9 Serialization More design patterns  

10 Review Grad student presentations  

finals week

Test 3 (Nov. 16)

Possible additional topics, time permitting

Graduate Projects, 20111

Students Description Presentation Date Approved?
Ben Kaiser XML Manipulations in C# Monday Oct. 31 YES
Thomas Tharp and Ramón García Perez Using the Model-View-ViewModel architecture Wednesday Nov. 2
YES
Asma'u Sani Mohammed
Taking full advantage of LINQ in a database application environment
YES
Urvi Tanna Developing Apps for Windows Mobile Monday Nov. 7
YES
Rohit Agrawal
Music Library web app with ADO.NET and SQLServer
YES
Divin Visariya and Hardik Nagda
Using Remote Object Invocation to Build a P2P File System
YES
Alex Blank The .NET Encryption Framework Wednesday Nov. 9 YES
Alberth José Montero Costa The F# Programming Language YES
Alexander Lange
The Mono Project
YES
Michael Finegan
Microsoft XNA Graphic Framework
Monday Nov. 14 NO
Gaurav Thawrani and Sharon Bhanu
Microsoft XNA Game Studio
YES
Fan Liangyi
Managed vs. Unmanaged Code in .NET
YES
Alex Canter
Serialization in .NET
YES

Communication

I will normally be using your 7-character RIT account as an email destination. You are expected to check it at least daily.

Additional technical communication of a less urgent nature will be posted in mycourses on discussion forums.


© RIT Computer Science, 2011