ch12
DESCRIPTION
vghggfgTRANSCRIPT
Chapter 12Microsoft Assemblies
Process Phases Discussed in This ChapterRequirementsAnalysis
Design
Implementation
ArchitectureFramework Detailed Design
xKey: = secondary emphasisx = main emphasis
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Learning Goals for This Chapter
… Microsoft’s component (“assembly”) architecture
… where assemblies fit in .NET
… required rudiments of C#
… the contents of .NET manifests, including:
Versioning
Attributes
… the difference between private and shared assemblies
… create assemblies using C#
Understand …
Be able to …
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
.NET Goals and Solutions
Create interoperable components from multiple source languages
o C++, Visual Basic, ….
Solve multiple component version clashes
o “dll hell”: naming confusion in COM
Define a common runtime
Avoid registry
o Necessity to register components with host computer
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Design Goal At Work: Reusability
Microsoft wanted to allow developers to create interoperable components using their favorite source languages.
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
The Parts of.NET
Web tools and LanguagesASP.NET, Windows Forms; Visual Basic.NET, C#
.NET Framework Classes
net XML IO Security . . . .
Common Language Runtime (CLR)
Memory Management Common Type System (CTS) . . . .
uses
uses
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Boolean
DateTime
Decimal – 28 significant digits
Double – 64-bit double-precision floating point
GUID – unique 128-bit integer; unique identifier
Int16, Int32, Int64
Sbyte – 8-bit signed integer –128 to +127
Single – 4-byte single precision floating point
TimeSpan – a period of time
Types in the CTS
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Boolean Equals( Object )
Int32 GetHashCode() o Generates an integer corresponding to
the value of the object
o Used by sorting algorithms in System.Collections
Type GetType()o for the Reflection API
String ToString()
Methods of System.Object
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Selected System.XX .NET Framework NameSpaces
Collections
ComponentModel
o “to implement the
runtime and design
time behavior of
components”
Data
o To deal with
databases via ADO
Drawing
IO
Net
o to interface with
common
network
protocols
Reflection
Runtime
Security
Text
o ASII, Unicode
etc.
Threading
Web
WinForms
XML Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Compilation Process in .NET
Source CodeC++VB
Compiler &metadatagenerator
IL andmetadata
Ancillary info
.dll or .exe
Base classlibrary
Classloader
IL compiler
native code
executeProcess File Key:
C#J#, Java (3rd parties)
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
A File
A File
A File
A File
The Parts of a .NET Assembly (Component)
Manifest Identity
o nameo version
Names of files Encrypted hash of files
to ensure integrity Specification of types
defined Names of referenced
assemblies Specification of required
security permissions
MicrosoftIntermediate
Language(IL)
Source Files A .NET assembly: xyz.dll
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Key Concept: A .NET Assembly
-- includes class code from multiple files, in IL form, described by a manifest.
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
C# Goals 1 of 2
Rapid application developmento as with JavaBeans
Cross-platform deploymento generates character stream interpreted by .Net runtime. o as with Java Virtual Machine
Access to platform-native resourceso take advantage of the Windows API to run as a full-
featured application on Windows 2000 Support for the COM and .NET platforms
Unlike
Java
UnlikeJava
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Features of C and C++ “with the functional ease of rapid application development tools.”
Components with properties, methods and events
o built in
C# Goals : 2 of 2
UnlikeJava
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
HelloWorld Output
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Selected C# Features
Automatic garbage collection
Allows developers to disable garbage collection
locally –
o by marking code as “unsafe”
o (e.g., where real time performance required?)
Eliminates pointers in favor of references
Introduces Interfaces
UnlikeJava
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
C# Web Features: Web Services
Attribute library allows wrapping of C# classes
and functions as Web services.
o a hosted software module callable over the Internet
typically via SOAP protocol.
o SOAP wraps method calls, parameters, and return
values, in XML packets.
Using appropriate attributes, programmer can
turn any C# class or function into a Web service.
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Creating a .NET Component 1 of 2
csc /t:library /out:hello.dll helloFile.cs
“target”Create a library component: Don’t seek Main()
“output”Component (output) name
Input fileC# compilation
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Creating a .NET Component (“Assembly”) 2 of 2
helloFile.cs
hello.dll
hello.dll
csc /t:library /out:hello.dll helloFile.cs
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Using a .NET Component
csc /r:hello.dll /out:helloApp.exe helloClient.cs
hello.dllhelloClient.cs
helloApp.exe
… now execute helloApp.
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Creating a .NET Component Containing Multiple Classes
csc /t:library /out:helloAuRevoir.dll
HelloAuRevoirComponentSource.cs
HelloAuRevoirComponentSource.cs
helloAuRevoir.dll
GreetingUtility HelloClass AuRevoirClass
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Output For “Multiple Class” Example
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Using metadata allows the CLR to support: Multiple execution models
o interpreted, o JITted (Just-in-time)o nativeo legacy code (prior to .NET)
Uniform services available to debuggers, profilers etc. Consistent exception handling Code access security Memory management Reflection Interoperability with existing unmanaged COM applications Interoperability with existing unmanaged code Optimization to match the particular CPU or environment.
Uses for Metadata
Amended from http://msdn.microsoft.com/library/default.asp
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Manifest of Component helloAuRevoir.dll
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Manifest Contents for helloAuRevoir.dll Component
1. -2. -3. -4. -5. -6. -7. -8. -9. -10. -11. -12. -13. -14. -15. -16. --
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Manifest Detail of sayHelloWorld() in HelloClass
1. -2. -3. -4. -5. -6. -7. -8. -
Recall the source:public void SayHelloWorld( )
{ GreetingUtility.OutputMessage ( "Component says: Hello World" );
}
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
The Version Field of an Assembly
Major version Minor version Revision Build number
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Versioning
(The process of evolving a component over time in a compatible manner.)
A new version is …
… source compatible with a previous version if
code that depends on the previous version can,
when recompiled, work with the new version.
… binary compatible if code that depended on the
old version can, without recompilation, work with
the new version.” (adapted from Microsoft)
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Attributes in .NET Metadata: about …o … variableso … classeso … functions
Types of attributes:o Built-ino User-defined
Available at runtime
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Output of main() in ConditionalDemo
with #define DEBUG without #define DEBUG
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Output For Authorship Querying
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Key Concept: A .NET Manifest Lists …
.. the files containing the IL-compiled classes, the .NET components on which the assembly depends, version numbers, attributes, and encrypted hash to verify not tampered in transit.
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Design Goal At Work: Reusability
We want to reuse an assembly, confident it is the one it’s supposed to be.
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Using NameSpaces
Application 1: List available flights in following form<Animated airline logo goes here>
<Material introducing available flights here >
From <city> to <city> departing at <time> and arriving at <time>.
<Animated logo of the Intergalactic Reservation Service goes here>
Application 2: List bookings already made in following form<Animated logo of the Intergalactic Reservation Service goes here >
<Material introducing instructions to the traveler goes here >
Please arrive at <time> at <city> airport for your flight.
Implement applications 1and 2. Exploit common components.
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Namespaces Across Multiple Components
Logo
AvailabilityAnnouncement
Itinerary namespace
(Physical) File organization (3 files)
Airlines namespace
Namespace stated: Airlines.Availability Classes: Logo, AvailabilityAnnouncement
Availability namespace
ItineraryAnnouncement
Logo
(Logical) Namespace organization
Source file name: AvailabilityComponentSource.cs
Component name: availability.dll
Namespace stated: Airlines.Itinerary Class: Logo
Source file name: ItineraryLogoComponentSource.cs
Component name: itineraryLogo.dll
Namespace stated: Airlines.Itinerary Class: ItineraryAnnouncement
Source file name: ItineraryAnnouncement.cs
Component name: itineraryAnnouncmnt.dllAdapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Airline Reservation System Display
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Public Key Cryptography
Any message encoded with one key can be decoded with the other.
One can’t encrypt and decrypt a message with the same key.
It’s practically impossible to deduce one key from the other.
It’s very unlikely that an encoded document can be decoded with an unmatched key
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Public Key Encryption Used in .NET
Public key: …iemhdZX… Private key: …92JiuHKM3… (secret)
myKeys.snk
Hashed version Encoded version
use private
key
ManifestNames & contentsof assembly
Verification process
AssemblyInfo.cs
Assembly source
assembly
hash
OK / not OKAdapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Key Concept: Component Identity
To ensure that the component we are using is the one intended, we use relatively or globally unique names: .NET also applies tamper-proofing via public key encryption.
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.
Summary Microsoft “assembly” == component
Microsoft distributes computing among desktops and
servers via, in part, .NET assemblies
.NET assemblies supercede and are more versatile than
(D)COM(+) objects. o Exist in Intermediate Language
o Permit versioning
o Include “attribute” feature
o Identity technique for shared assemblies reduces “dll hell”
C# language designed for .NET
Assemblies constructed via C#, VB, ... are interoperableAdapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.