Вы находитесь на странице: 1из 40

Chapter 12

Microsoft Assemblies

Requirements
Analysis

Process Phases Discussed in This Chapter


Design
Framework Architecture Detailed Design

Key: x = main emphasis x = secondary emphasis

Implementation

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Learning Goals for This


Chapter

Understand
Microsofts 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

Be able to
create assemblies using C#
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Create interoperable components


from multiple source languages
o C++, Visual Basic, .

.NET
Goals and
Solutions

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 Languages
ASP.NET, Windows Forms; Visual Basic.NET, C#
.NET Framework Classes
net

XML

IO

Security

uses

....
uses

Common Language Runtime (CLR)


Memory Management

Common Type System (CTS)

....

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Types in the CTS

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


Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Methods of System.Object

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()
Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Selected System.XX .NET Framework NameSpaces

Collections

Drawing

Security

ComponentModel

IO

Text

o to implement the

Net
o to interface with

runtime and design

etc.

common

time behavior of

network

components

o ASII, Unicode

Threading

Web

WinForms

XML

protocols

Data

o To deal with

databases via ADO

Reflection
Runtime

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Base class
library

Compilation Process in .NET


Ancillary info
Source Code
C++
VB
C#
J#, Java (3rd parties)

Compiler &
metadata
generator

IL and
metadata

Class
loader

.dll or .exe
IL compiler

native code
Key:

Process

File

execute

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

The Parts of a .NET Assembly (Component)


Source Files
A File

A .NET assembly: xyz.dll

Manifest
Identity

A File

o name
o version

A File
A File

Names of files
Encrypted hash of files
to ensure integrity
Specification of types
defined
Names of referenced
assemblies
Specification of required
security permissions

Microsoft
Intermediate
Language
(IL)

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 development


o as with JavaBeans

Cross-platform deployment
o generates character stream interpreted by .Net runtime.
e
k
o as with Java Virtual Machine
i
l
Un

Access to platform-native resources

Java

o take advantage of the Windows API to run as a fullfeatured application on Windows 2000

Support for the COM and .NET platforms

Unlike
Java

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

C# Goals : 2 of 2
Features

of C and C++ with the functional


ease of rapid application development tools.

Components with properties, methods and


events
o built in

Unlike
Java

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

Unlike
Java

o (e.g., where real time performance required?)

Eliminates pointers in favor of references

Introduces Interfaces
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


C# compilation

Input file

csc /t:library /out:hello.dll helloFile.cs

output
Component (output) name
target
Create a library component: Dont seek Main()

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
csc /t:library /out:hello.dll helloFile.cs
hello.dll
hello.dll

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Using a .NET Component

helloClient.cs

hello.dll

csc /r:hello.dll /out:helloApp.exe helloClient.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


GreetingUtility

HelloClass

AuRevoirClass

HelloAuRevoirComponentSource.cs
csc /t:library /out:helloAuRevoir.dll
HelloAuRevoirComponentSource.cs

helloAuRevoir.dll
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
o
o
o

interpreted,
JITted (Just-in-time)
native
legacy code (prior to .NET)

Uses for Metadata

Uniform services available to debuggers, profilers etc.


Consistent exception handling
Code access security
Amended from http://msdn.microsoft
Memory management
.com/library/default.asp
Reflection
Interoperability with existing unmanaged COM applications
Interoperability with existing unmanaged code
Optimization to match the particular CPU or environment.

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
o
o

Types of attributes:
o
o

variables
classes
functions
Built-in
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 its supposed to be.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Using NameSpaces
Implement applications 1and 2. Exploit common components.
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>
atSoftware
<city>
for your
flight.
Adapted from
Design:airport
From Programming
to Architecture
by Eric J. Braude (Wiley 2003), with permission.

(Logical) Namespace organization


Airlines namespace

(Physical) File organization (3 files)


Source file name:
AvailabilityComponentSource.cs
Namespace stated: Airlines.Availability
Classes: Logo, AvailabilityAnnouncement
Component name: availability.dll

Availability namespace
Logo
AvailabilityAnnouncement

Itinerary namespace

Source file name:


ItineraryLogoComponentSource.cs
Namespace stated: Airlines.Itinerary
Class: Logo
Component name: itineraryLogo.dll

Logo
ItineraryAnnouncement

Source file name:


ItineraryAnnouncement.cs

Namespaces Across
Multiple Components

Namespace stated: Airlines.Itinerary


Class: ItineraryAnnouncement
Component name: itineraryAnnouncmnt.dll

Adapted 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 cant encrypt and decrypt a message with


the same key.

Its practically impossible to deduce one key


from the other.

Its 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: iemhdZX


Private key: 92JiuHKM3 (secret)
myKeys.snk

use
private
Hashed version
Encoded version
key
hash

AssemblyInfo.cs

Assembly source

Names & contents


of assembly

Manifest

assembly

Public Key
Encryption

Verification process
OK / not OK
Adapted 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.

Summar
y

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 interoperable


Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.

Вам также может понравиться