Lecture 13- The NET Framework
Outline
In the last lecture, we continued our discussion of Objects…
By finishing our our own custom Collection: JTrainCollection
By inheriting from the .NET System Class, CollectionBase. And illustrated its use, with a generalized Multiple-JTrain Example, Including the addition of two Shared Members.
We now continue our discussion with some related topics:
The .NET Framework and .NET Framework Classes
Which provide us with a platform for Windows Application Development;
And supporting basis for our Object-oriented approach:
Namespaces
Which place a hierarchical structure on all .NET Classes…
Both the Framework Classes, and Developer Classes
Inheriting From Object
Think back to when we first defined JTrain…
We used a default New() Constructor provided ‘by the System’.
So…where did this Constructor come from?
Recall that we later used JTrain’s default Constructor…
When we made our first instance of JFreightTrain:
We used the Inherits Keyword to get this functionality:
So, this type of behavior implies Inheritance.
However, we did NOT use the ‘Inherits’ keyword when we defined JTrain.
In turns out that all VB Objects automatically inherit from Object…
So that the Class Object serves as the universal Base Class.
Even though the VB Keyword ‘Inherits’ is not necessary, for this.
Several useful methods are thus available from Object, including:
JFreightTrain Inherits from JTrain
ToString() : returns a String representation of the Object (we’ve used this). GetType() : returns a Type Object, representing the Object’s data type
This brings us to a discussion of the .NET Framework Classes
To discuss this, we first need to discuss the .NET Framework.
Windows Application Development
In this class, we have discussed Windows Application Development
Now, let’s talk a little bit about the underlying systems…
All software written by developers must communicate with Windows:
To store data, a block of memory must be reserved:
The Windows Memory Manager is called.
To write data to the disk:
The Windows Disk Subsystem is called.
To draw a Window on the screen:
The .NET platform and how it relates to Objects. The Windows O.S. and its interface with developed software.
The Windows Graphics Subsystem is called.
This communication is supported by the Win32 API
The Windows 32 Abstract Programming Interface.
The Windows 32 API
The Win API provides a layer of abstraction via a set of interfaces…
And a set of associated programs for implementing these interfaces.
Each of which provides a standard hand-shake with a Windows Subsystem.
Examples:
When a file is to be written or read, a standard DialogBox is provided:
When a Window is to be drawn on the screen:
From the API’s Common Dialog Box Library. The API’s User Interface is used, together with the Common Control Library.
In the past, Windows developers used the Win32 API directly…
Using a Software Development Kit (SDK) which included:
The Win32 API. Tools to assist in use of the Win32 APU.
However: the API is difficult to learn and tricky to use!
Ex: Roughly 100 lines of code required to draw a basic Window.
VB: Abstracting away the API
VB helped by providing developers with a big simplification:
Tricky API functions were packaged in an user-friendly way.
In VB, a Window can be drawn with only a few lines of code…
Thus, VB provides an Abstraction Layer on top of the Windows API
So users don’t have to deal with the API directly. This was greatly responsible for the big success of VB.
This situation was quite frustrating for non-VB developers…
C++ and Java developers have their own advantages:
C++ provides lots of control over program function... Java makes programs extremely portable.
However, development tasks that are easy in VB
Which provide many more details, ‘hidden underneath’…
e.g., GUI development. Take a really long time in Java, for instance.
This VB-Windows dependency was also dangerous for Microsoft:
What happens if Windows is no longer dominant in 20 years?
The .NET Framework Classes
In 1992, Microsoft improved this situation quite a bit....
By introducing the Microsoft Foundation Classes (MFC)…
A set of C++ Classes, each of which provides a wrapper:
Essentially, providing an Object Oriented layer of abstraction on the API.
Along with the Visual Studio IDE.
Later, Microsoft recast this concept within the larger .NET Framework.
The .NET Framework is completely object-oriented:
Anything done in .Net will be done using an Object.
Ex: To to open a file, you use a System Object designed for this purpose.
This set of objects is actually a huge set of Base Classes (approx. 3500)
Encapsulating and simplifying an API function.
called the .NET Framework Classes.
All .NET developers will use this same set of classes…
Regardless of the platform they are on!
Windows, Linux, Pocket PC, Mac… Very developer-friendly!
Regardless of the high-level language (HLL) they choose!
VB .NET, C++, C#, J# (.NET version of Java), etc.
Common Language Infrastructure
This is accomplished by compiling HLL code in two steps:
First to Microsoft Intermediate language: CIL (Common Intermediate Language; also called MSIL).
All high-level languages are compiled to this same CIL code.
This language is NOT dependent on any processor or platform. Then to platform-specific native (machine) code later on…
At runtime, by the Common Language Runtime (A Virtual Machine):
So, the Common Language Infrastructure, CLI = CIL + CLR
In this way, Microsoft freed itself from its dependence on Windows…
So-called ‘Just-In-Time’ (JIT) Compilation.
As well, in principle, as its dependence on Intel Chip sets.
Note that the Java concept is similar:
It is also compiled to an intermediate language, called ‘Byte Code’.
Which then runs in the Java Virtual Machine.
However, while Java is “One Language / Many Platforms”…
.NET started as ‘Many Languages / One Platform’ (and then expanded).
Common Language Runtime (CLR)
The Heart of the .NET Framework is the CLR, which handles:
Loading and Executing Code: The primary task of JIT Compilation
(Most) languages supported by the CLR are referred to as ‘Managed Code’.
Application Isolation:
Individual applications should run separately :
Applications now have built-in security:
Available Data Types are shared by all managed languages…
Exception Handling and Memory Management:
Code requires ‘evidence’ to run in CLR (determined via programmer-set policies). In contrast, old Windows applications have unlimited access to system data.
Inter-language Interoperability:
So that they may crash separately from the OS. Idea: Prevent software-based system crashes (Blue Screen of Death)
Provide appropriate structures for error recovery (we’ve discussed this).
Formally, the CLR consists of 4 elements:
A JIT Compiler and a Virtual Execution System (VES, or Virtual Machine) The Common Language Runtime (CLR) and Specification (CLS)
Achieving Language Interoperability
Language interoperability in .NET goes beyond common compilation:
The idea is really much more general:
It would be best if classes which are defined/extended in one language…
Example: Our JTrain Class should be extendable by a C# Programmer
Primitive data types are handled the same in all managed languages…
Integers, Doubles, Strings, etc are defined consistently.
Previously, they were defined differently, in different HLLs.
This simplifies the job of interoperability between languages.
.NET also introduced the Common Language Specification (CLS):
Along with managed code comes the concept of managed data…
Nearly all CLR-managed Data are represented as Objects.
So that the Classes will function properly in a C# program (!)
.NET introduced the Common Type System (CTS) to support this:
Are then freely available to all.
Specifically: Classes in the .NET Framework and derived Classes
These can be passed between managed languages.
This brings us back to the .NET Framework…
Overview of the CLI
The .NET Framework Classes
The .NET Framework consists of two components:
The Common Language Runtime (Actually, the CLI). The .NET Framework Classes.
A huge set (> 3500) of Base Classes for developer use. A bit hard to navigate…
Fortunately, the Framework Classes are conveniently divided into related groups.
Each group is associated with a specific Namespace. The overall collection of namespaces is hierarchical:
Namespaces can contain other namespaces.
Created by stringing together the namespaces with the dot (.) operator
Each class must belong to exactly 1 namespace:
Its ‘containing’ namespace, followed by its specific Class name.
The System Namespace
Most Framework Classes are contained in the System namespace.
In fact, we have already been using System Classes extensively… Examples:
We were allowed to use abbreviated versions…
System.Windows.Forms – Classes for drawing Forms System.Console – A Class for designing Console Applications System.Object – Here, we see that Object derives from Class System.
Ex: We used Console.ReadLine() rather than System.Console.ReadLine()
Now, we talk about finding Namespaces and Namespace Creation:
Finding the Current Namespace
Using the Object Browser
Creating Your Own Namespace
Multiple Inheritance
Some languages support Multiple Inheritance
By which Objects can combine behaviors from several ‘superclasses’.
Sounds interesting…but this can cause ambiguity troubles.
Examples:
C++ permits multiple inheritance Java technically does not…
but supports the use of multiple interfaces, instead.
In the .NET Framework, Multiple-inheritance is not allowed.
Each Class must be derived (directly inherit) from exactly one Class.
In other words, only 1 Class can be included in a Class’s Inherits Clause. Recall: all Objects ultimately inherit from System.Object
For derived Classes, there will be a chain of inheritance-relationships:
JFreightTrain inherited from JTrain…
JTrain inherited from System.Object.
Preview: Software Engineering
In the next course, we continue with our tour of VB .NET:
Advanced topics in OO Programming, including:
Partial and Abstract Classes Interfaces and Generics
Creating Class Libraries
Which encapsulate related sets of Classes for re-use.
Registering your Libraries…
Creating Custom Controls Custom Graphics Then, some related technologies:
So that you can find the classes of your library with the Object Browser.
Database Access (ADO.NET) Server-Side Programming (ASP.NET)
In the Software Engineering Seminar, we will discuss using C# ....
This will allow us to do Embedded Programming ( Course 4 )
You may not get much C# until the seminar.
We will probably look at J# concurrently (Microsoft’s version of Java)
Conclusion and Final Project
In this Course, we discussed Application Programming Fundamentals:
Specifically: development for Windows Applications. Along the way, we discussed: The most frequently-used Controls. Basic and Advanced topics in Object Oriented Programming.
In the next course, we will continue with a more VB .NET:
Advanced OO Topics Creating Class Libraries Creating Custom Controls Custom Graphics. Then, some related technologies:
Database Access (ADO.NET) Server-Side Programming (ASP.NET)
The C# language will be discussed in my seminar…
To allow us to do Embedded Programming ( Course 4 )