Software Design Pattern Using : Algorithmic Skeleton Approach S
Total Page:16
File Type:pdf, Size:1020Kb
International Journal of Computer Network and Security (IJCNS) Vol. 3 No. 1 ISSN : 0975-8283 Software Design Pattern Using : Algorithmic Skeleton Approach S. Sarika Lecturer,Department of Computer Sciene and Engineering Sathyabama University, Chennai-119. [email protected] Abstract - In software engineering, a design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved. Many patterns imply object-orientation or more generally mutable state, and so may not be as applicable in functional programming languages, in which data is immutable Fig 1. Primary design pattern or treated as such..Not all software patterns are design patterns. For instance, algorithms solve 1.1Attributes related to design : computational problems rather than software design Expandability : The degree to which the design of a problems.In this paper we try to focous the system can be extended. algorithimic pattern for good software design. Simplicity : The degree to which the design of a Key words - Software Design, Design Patterns, system can be understood easily. Software esuability,Alogrithmic pattern. Reusability : The degree to which a piece of design can be reused in another design. 1. INTRODUCTION Many studies in the literature (including some by 1.2 Attributes related to implementation: these authors) have for premise that design patterns Learn ability : The degree to which the code source of improve the quality of object-oriented software systems, a system is easy to learn. because design patterns are supposed to improve the Understandability : The degree to which the code quality of systems[1], for example, a tangled source can be understood easily. implementation of patterns impacts negatively quality Also, patterns generally ease future enhancement at the Modularity : The degree to which the implementation expense of simplicity. There is little empirical evidence of the functions of a system are independent from one to support the claims of improved reusability, another. expandability and understandability as put forward in 1.3 Attributes related to runtime : when applying design patterns. We present detailed Generality: The degree to which a system provides a results for three design pat-terns: Abstract Factory, wide range of functions at runtime. Composite, Flyweight and three quality attributes: reusability, understandability, and expandability. Modularity at runtime: The degree to which the functions of a system are independent from one another The following set of quality attributes, based on at runtime. their relevance to design patterns[2]. 2. ALGORITHMIC SKELETON In computing, algorithmic skeletons (a.k.a. Parallelism Patterns) are a high-level parallel programming model for parallel [3] [4] and distributed computing. Algorithmic skeletons take advantage of common programming patterns to hide the complexity of parallel and distributed applications. Starting from a basic set of patterns (skeletons), more complex patterns 72 International Journal of Computer Network and Security (IJCNS) Vol. 3 No. 1 ISSN : 0975-8283 can be built by combining the basic ones.This section public Seq(Execute <P,R> describes some well known Algorithmic Skeleton execute){...} patterns. Additionally, the patterns signature in the 3. EXAMPLE PROGRAM Skandium library is provided for clarity. The following example is based on the Java FARM is also known as master-slave. Farm represents Skandium library for parallel programming.The task replication where the execution of different tasks objective is to implement an Algorithmic Skeleton by the same farm are replicated and executed in based parallel version of the QuickSort algorithm parallel. using the Divide and Conquer pattern. Notice that the Farm(Skeleton<P,R> keleton){...} high-level approach hides Thread management from the programmer. PIPE represents staged computation. Different tasks can be computed simultaneously on different pipe // 1. Define the skeleton program stages. A pipe can have a variable number of stages, Skeleton<Range, Range> sort = new each stage of a pipe may be a nested skeleton pattern. DaC<Range, Range>( Note that an n-stage pipe can be composed by nesting n-1 2-stage pipes. new ShouldSplit(threshold, maxTimes), <X> Pipe(Skeleton<P,X> stage1, new SplitList(), Skeleton<P,X> stage2){...} new Sort(), FOR represents fixed iteration, where a task is new MergeList()); executed a fixed number of times. In some // 2. Input parameters implementations the executions may take place in parallel.[5] Future<Range> future = sort.input(new Range(generate(...))); For(Skeleton<P,X> skeleton, int times){...} // 3. Do something else here. WHILE represents conditional iteration, where a given skeleton is executed until a condition is met. // ... public While(Skeleton<P,P> skeleton, // 4. Block for the results Condition<P> condition){...} Range result = future.get(); IF represents conditional branching, where the The first thing is to define a new instance of the execution choice between two skeleton patterns is skeleton with the functional code that fills the pattern decided by a condition. (ShouldSplit, SplitList, Sort, MergeList). The If(Condition<P> condition, functional code is written by the programmer without Skeleton<P,R> trueCase, Skeleton<P,R> parallelism concerns. falseCase){...} The second step is the input of data which triggers MAP represents split, execute, merge computation. A the computation. In this case Range is a class holding task is divided into sub-tasks, sub-tasks are executed in an array and two indexes which allow the parallel according to a given skeleton, and finally sub- representation of a subarray. For every data entered into task's results are merged to produce the original task's the framework a new Future object is created. More result[6]. than one Future can be entered into a skeleton <X,Y> Map(Split<P,X> split, simultaneously. Skeleton<X,Y> skeleton, Merge<Y,R> The Future allows for asynchronous computation, merge){...} as other tasks can be performed while the results are D&C represents divide and conquer parallelism. A task computed. The functional codes in this example is recursively sub-divided until a condition is met, then correspond to four types Condition, Split, Execute, and the sub-task is executed and results are merged while Merge. the recursion is unwound. public class ShouldSplit implements DaC(Condition<P> condition, Condition<Range>{ Split<P,P> split, Skeleton<P,R> skeleton, Merge<R,R> merge){...} int threshold, maxTimes, times; SEQ does not represent parallelism, but it is often used public ShouldSplit(int threshold, a convenient tool to wrap code as the leafs of the int maxTimes){ skeleton nesting. this.threshold = threshold; 73 International Journal of Computer Network and Security (IJCNS) Vol. 3 No. 1 ISSN : 0975-8283 this.maxTimes = maxTimes; storage, reducing not just processing time but also allocation & deallocation of working memory. this.times = 0; 4.4.PRECOMPUTATION } Precomputing a complete range of results prior to @Override compiling, or at the beginning of an algorithm's public synchronized boolean execution[11], can often increase algorithmic efficiency condition(Range r){ substantially. This becomes advantageous when one or more inputs is constrained to a small enough range that return r.right - r.left > the results can be stored in a reasonably sized block of threshold && memory. times++ < this.maxTimes; 5. SOFTWARE VALIDATION VERSUS } HARDWARE VALIDATION An optimization technique that was frequently } taken advantage of on legacy platforms was that of 4. ALGORITHMIC EFFICIENCY allowing the hardware (or microcode) to perform In computer science, efficiency is used to describe validation on numeric data fields[12]. The choice was properties of an algorithm relating to how much of to either spend processing time checking each field for various types of resources it consumes[7][8]. a valid numeric content in the particular internal Algorithmic efficiency can be thought of as analogous representation chosen or simply assume the data was to engineering productivity for a repeating or correct and let the hardware detect the error upon continuous process. execution. The choice was highly significant because to check for validity on multiple fields (for sometimes 4.1 SOFTWARE METRICS many millions of input records), it could occupy The two most frequently encountered and valuable computer resources. Since input data fields measurable metrics of an algorithm are:-speed or were in any case frequently built from the output of running time - the time it takes for an algorithm to earlier computers[13] complete, and 'space' - the memory or 'non-volatile 6. CONCULSION storage' used by the algorithm during its operation. Different software development models will focus Transmission size - such as required bandwidth the desing effort at different points in the development during normal operation or size of Eternal memory- process. Newer development models, such as such as temporary disk space used to accomplish its algorithamic skeleton often employ desing case task. development and place an increased portion of the 4.2 SPEED desing in the