Sales Tel: +63 945 7983492  |  Email Us    
SMDC Residences

Air Residences

Features and Amenities

Reflective Pool
Function Terrace
Seating Alcoves

Air Residences

Green 2 Residences

Features and Amenities:

Wifi ready study area
Swimming Pool
Gym and Function Room

Green 2 Residences

Bloom Residences

Features and Amenities:

Recreational Area
2 Lap Pools
Ground Floor Commercial Areas

Bloom Residences

Leaf Residences

Features and Amenities:

3 Swimming Pools
Gym and Fitness Center
Outdoor Basketball Court

Leaf Residences

Contact Us

Contact us today for a no obligation quotation:


+63 945 7983492
+63 908 8820391

Copyright © 2018 SMDC :: SM Residences, All Rights Reserved.


































































000-634 dumps with Real exam Questions and Practice Test - smresidences.com.ph

Great Place to download 100% free 000-634 braindumps, real exam questions and practice test with VCE exam simulator to ensure your 100% success in the 000-634 - smresidences.com.ph

Pass4sure 000-634 dumps | Killexams.com 000-634 real questions | http://smresidences.com.ph/

000-634 Object Oriented Analysis and Design - Part 2

Study Guide Prepared by Killexams.com IBM Dumps Experts

Exam Questions Updated On :



Killexams.com 000-634 Dumps and Real Questions

100% Real Questions - Exam Pass Guarantee with High Marks - Just Memorize the Answers



000-634 exam Dumps Source : Object Oriented Analysis and Design - Part 2

Test Code : 000-634
Test Name : Object Oriented Analysis and Design - Part 2
Vendor Name : IBM
: 72 Real Questions

found maximum 000-634 Questions in dumps that I prepared.
I passed. right, the exam become tough, so I simply got past it attributable to killexams.com and examSimulator. i am upbeat to document that I passed the 000-634 exam and feature as of past due obtained my statement. The framework questions were the component i was most harassed over, so I invested hours honing on thekillexams.com exam simulator. It beyond any doubt helped, as consolidated with distinct segments.


Dumps modern day 000-634 exam are available now.
i have renewed my membership this time for 000-634 exam. I be given my involvement with killexams.com is so vital it isnt always feasible surrender through not having a membership. I am able to simply agree with killexams.com exams for my exam. just this web site can help me obtain my 000-634 accredition and assist me in getting above ninety five% marks inside the exam. You all are certainly making an outstanding displaying. preserve it up!


actually remarkable experience! with 000-634 actual test questions.
initially I need to mention thanks to you human beings. i have cleared 000-634 exam via subscribing in your testmaterial. So I desired to percentage my success on your website. thanks once again. thanks very a lot on yourremarkable help. i have cleared my 000-634 with 90%.


Here are tips & tricks with dumps to certify 000-634 exam with high scores.
It became the time while i used to be scanning for the net exam simulator, to take my 000-634 exam. I solved all questions in just 90 minutes. It grow to be tremendous to recognize that killexams.com Questions & answers had all important dump that emerge as wished for the exam. The material of killexams.com changed into powerful to the pointthat I passed my exam. Even as i was instructed about killexams.com Questions & answers with the useful resource of one among my partners, i was hesitant to make use of it so I decided on to down load the demos to begin with, and test whether i canget right assist for the 000-634 exam.


How a lot 000-634 exam and prep manual cost?
i was working as an administrator and changed into making ready for the 000-634 exam as well. referring to detailedbooks changed into making my education tough for me. however after I cited killexams.com, i found out that i used to bewithout difficulty memorizing the applicable solutions of the questions. killexams.com made me assured and helped me in attempting 60 questions in eighty minutes without difficulty. I passed this exam efficiently. I best proposekillexams.com to my buddies and co-workers for smooth coaching. thanks killexams.


Dont neglect to strive the ones real exam questions for 000-634 exam.
killexams.com is the satisfactory and correct way i have ever encounter to put together and pass IT checks. The component is, it offers you accurately and precisely what you need to recognise for 000-634 exam. My pals used killexams.com for Cisco, Oracle, Microsoft, ISC and other certifications, all exact and valid. completely dependable, my private preferred.


Questions had been precisely equal as I got!
killexams.com provides dependable IT exam stuff, i have been the use of them for years. This exam is no exception: I passed 000-634 the usage of killexams.com questions/answers and exam simulator. Everything human beings say is authentic: the questions are genuine, this is a totally reliable braindump, completely legitimate. And I actually have only heard rightly things approximately their customer support, however in my view I by no means had issues that might lead me to contact them in the first region. Just top class.


Do you want latest dumps of 000-634 examination, it's far right vicinity?
i am satisfied to tell that i have effectively passed the 000-634 exam. on this context I must admit that your questions and answers did assist (if now not completely) to tied over the exam because the questions asked within the exam have been not completely blanketed with the aid of your questions bank. however I should congratulate your effort to make us technically sound together with your s. way to killexams.com for clearing my 000-634 exam in first class.


Passing the 000-634 exam with sufficient expertise.
The 000-634 exam is supposed to be a completely diffcult exam to clear however I cleared it closing week in my first attempt. The killexams.com s guided me well and i used to be nicely organized. Recommendation to other university college students - dont take this exam lightly and examine very well.


real 000-634 test questions! i used to be now not waiting for such shortcut.
This is the satisfactory exam preparation I actually have ever long past over. I passed this 000-634 companion exam bother unfastened. No shove, no anxiety, and no disappointment amid the exam. I knew all that I required to recognise from this killexams.com %. The questions are sizable, and I were given notification from my associate that their coins again surety lives as much as expectancies.


IBM Object Oriented Analysis and

Object-Oriented analysis and Design | killexams.com Real Questions and Pass4sure dumps

This chapter is from the publication 

evaluation emphasizes an investigation of the difficulty and necessities, as opposed to a solution. as an example, if a new online trading gadget is favored, how will it's used? What are its functions?

"evaluation" is a huge term, most reliable certified, as in requirements analysis (an investigation of the necessities) or object-oriented analysis (an investigation of the area objects).

Design emphasizes a conceptual answer (in application and hardware) that fulfills the requirements, in place of its implementation. for instance, an outline of a database schema and application objects. Design concepts frequently exclude low-degree or "obtrusive" particulars—obtrusive to the supposed buyers. finally, designs may also be applied, and the implementation (reminiscent of code) expresses the genuine and comprehensive realized design.

As with evaluation, the term is highest quality certified, as in object-oriented design or database design.

useful analysis and design were summarized within the phrase do the correct aspect (evaluation), and do the component correct (design).


UNICOM Nabs Versant for Object-Oriented Databases | killexams.com Real Questions and Pass4sure dumps

UNICOM increased into the thing oriented database records realm this month when it announced plans to purchase Versant, a publicly traded developer of a few object-oriented databases, for roughly $32 million.

situated in 1988 as Object Sciences Corp., Versant turned into an early proponent of object oriented databases, which store statistics as objects. Object database management methods (ODBMS) convey performance advantages over relational database management systems (RDBMS) in powering functions that are written in object oriented languages and require storing of complex objects.

Versant’s first product was the Versant Object Database (VOD), which began to benefit steam in the early Nineties and continues to be actively developed nowadays. VOD runs on Unix, Linux, and home windows working methods, and excels at running functions with high concurrency and efficiency requirements akin to trading systems, telecom community management techniques, airline and resort reservation programs, and risk evaluation for banks, based on the Wikipedia entry on Versant.

Versant changed its identify to Versant Object technology in 1993, went public on the NASDAQ change in 1996, and altered its name to Versant Corp. in 1999. In 2004, it bought Poet software, the German developer of an ODBMS called FastObjects. In 2008 Versant got one other ODBMS, called db40, which is an open supply ODBMS undertaking based in 2000 via Carl Rosenberger.

today, Versant continues to sell and enhance VOD, FastObjects, and db40. The enterprise has struggled to generate income over the ultimate a couple of years, as revenues have dropped from $25.three million in 2008 to about $16.three million final yr. The business, which is based mostly in Redwood metropolis, California, has remained profitable, despite the fact, and continues to strengthen new application and are seeking for new consumers and OEM partnerships with ISVs.

Versant’s board accepted the sale to UNICOM. The deal requires Versant shareholders to be paid $eleven.50 per average share, a 17 % premium on Versant’s closing cost on September 28. The transaction is expected to complete earlier than the conclusion of Versant’s latest quarter ending January 31, 2013. Versant is free to searching for option deals through October 29.

“This merger will carry premium value and liquidity to Versant’s shareholders. Versant is worked up to accomplice with UNICOM to proceed to extend the business’s market management place,” cited Versant president and CEO Bernhard Woebker in a statement.

The sentiment become echoed by way of Corry Hong, founder, president, and CEO of Mission Hills, California-based UNICOM, who stated that Versant’s Redwood city and Hamburg places of work “will boost their current presence in both California and Germany.”

UNICOM has bought a few application organizations over the final a number of years, together with SoftLanding systems, a developer of exchange management application for the IBM i server.

connected studies

UNICOM Wheels and deals for two Public companies

UNICOM Acquires ITSM and z/OS utility companies

UNICOM Loses enchantment of SoftLanding Lawsuit

SoftLanding announces Sale on New IBM i package

UNICOM Loses in courtroom, Forces SoftLanding clients to upgrade

UNICOM Acquires Macro four, Sees i OS Synergy with SoftLanding equipment

SoftLanding programs got by CICS professional Unicom systems

                     submit this story to del.icio.us               post this story to Digg    put up this story to Slashdot


Frenemies: a quick heritage of Apple and IBM Partnerships | killexams.com Real Questions and Pass4sure dumps

even though Apple and IBM have had their share of fights through the years, this week's deal is not their first pairing.

IBM Apple Merger

Steve Jobs battled a number of tech rivals, however within the early 80s, his ire become largely directed at IBM. The skilled squabble dates again to at the least 1981 with Apple's "Welcome, IBM. seriously" ad, and reputedly ended simply the day before today with a joint contract to bring IBM's business software to iOS gadgets later this 12 months. but whereas the corporations have certainly clashed over the closing 30 years, yesterday's pairing was no longer the primary time these two behemoths have teamed up.

Take AIMJust 10 years after the primary salvo changed into fired between Apple and IBM, the two joined with Motorola in 1991 to boost a common for the PowerPC structure that could go towards the Microsoft-Intel Wintel alliance. The Apple-Intel-Motorola (purpose) crew took IBM's energy instruction set architecture and turned it into a client-pleasant version that became manufactured by IBM and Motorola and used in Apple's Macintosh line from 1994 to 2006, when Apple - to which Jobs returned in 1997 - transitioned to Intel-based machines.

"it be been ten years because their transition to the PowerPC, and they believe Intel's technology will support us create the most efficient own computers for the next ten years," Jobs noted in asserting the circulate.

From OS to Oh NoIn the late 80s, Apple become working on an object-oriented working device, codenamed red. nevertheless it become having challenge pulling it all together. within the wake of the aim alliance, Apple grew to become to IBM for information, and purple was reborn as a joint undertaking called Taligent with IBM's Joe Guglielmi at the helm.

The Taligent development team worked away for two years, eventually switching from an object-oriented OS to an object-oriented programming environment that could work on any modern OS. however despite guide from Hewlett-Packard, Taligent all but fizzled by means of the mid-90s. Guglielmi left the company for Motorola in 1995, and after his successor, Dick Guarino, died of a heart assault later that 12 months, Taligent grew to become simply a different IBM subsidiary. It turned into officially dissolved in 1998.

Bullet and a TargetAfter being spurned with the aid of Microsoft on an object linking and embedding undertaking, Apple approached IBM about working on it together in 1992. It resulted in the OpenDoc word-processing software and browser but did not have what it took to go in opposition t Java. When he back to Apple, Jobs "put a bullet through [OpenDoc's] head," as he spoke of.

The Enemy of My EnemyIn the ultimate 20 years, Apple and IBM have taken separate paths. IBM jettisoned its computing device company and focused firmly on the business, making headlines along the way for its synthetic intelligence work on Watson. Apple, in the meantime, grew to become a buyer darling, with shoppers lining as much as nab the company's newest telephones and pills. via coming lower back collectively, though, Apple delves further into the enterprise with a partner it truly is familiar in that area, whereas IBM receives to offer up items with a certain "cool" factor and tap into the Apple mystique.

For greater, check out Apple and IBM Bury the Hammer and IBM and Apple imply company.


Unquestionably it is hard assignment to pick dependable certification questions/answers assets regarding review, reputation and validity since individuals get sham because of picking incorrectly benefit. Killexams.com ensure to serve its customers best to its assets concerning exam dumps update and validity. The vast majority of other's sham report dissension customers come to us for the brain dumps and pass their exams joyfully and effortlessly. They never trade off on their review, reputation and quality on the grounds that killexams review, killexams reputation and killexams customer certainty is imperative to us. Uniquely they deal with killexams.com review, killexams.com reputation, killexams.com sham report objection, killexams.com trust, killexams.com validity, killexams.com report and killexams.com scam. On the off chance that you see any false report posted by their rivals with the name killexams sham report grievance web, killexams.com sham report, killexams.com scam, killexams.com protest or something like this, simply remember there are constantly awful individuals harming reputation of good administrations because of their advantages. There are a huge number of fulfilled clients that pass their exams utilizing killexams.com brain dumps, killexams PDF questions, killexams hone questions, killexams exam simulator. Visit Killexams.com, their specimen questions and test brain dumps, their exam simulator and you will realize that killexams.com is the best brain dumps site.

Back to Braindumps Menu


HP0-G11 free pdf | C2010-503 questions and answers | C2090-548 braindumps | GE0-807 Practice test | EX0-001 braindumps | 000-P02 study guide | ES0-003 dump | M2150-753 pdf download | P2090-076 brain dumps | C9520-911 VCE | 000-P01 real questions | 000-N55 practice test | 000-N52 Practice Test | OG0-093 test questions | 000-M195 mock exam | 3C00120A practice questions | ICDL-EXCEL test prep | HP3-X08 examcollection | CSSLP test prep | HP0-704 exam questions |


Exactly same 000-634 questions as in real test, WTF!
It is safe to say that you are searching for IBM 000-634 Dumps of real questions for the Object Oriented Analysis and Design - Part 2 Exam prep? They give most refreshed and quality 000-634 Dumps. Detail is at http://killexams.com/pass4sure/exam-detail/000-634. They have arranged a database of 000-634 Dumps from actual exams with a specific end goal to give you a chance to get ready and pass 000-634 exam on the first attempt. Simply remember their and unwind. You will pass the exam.

We provide real 000-634 pdf test Questions and Answers braindumps in 2 arrangements. PDF version and exam simulator. Pass IBM 000-634 real test quickly and effectively. The 000-634 braindumps PDF type is accessible for downloading and printing. You will be able to print your 000-634 study guide and prepare for the exam while on vacation or travelling. Their pass rate is high to 98.9% and also the equivalence rate between their 000-634 study guide and real test is 99% in light of their seven-year teaching background. Does one want successs within the 000-634 exam in mere one attempt? Straight away go for the killexams.com 000-634 real exam questions. The sole issue that's in any means necessary here is passing the 000-634 - Object Oriented Analysis and Design - Part 2 test. All that you just need will be a high score of IBM 000-634 exam. The simply one task you have got to do is downloading braindumps of 000-634 exam from killexams.com and start memorizing the answers of questions. They are not letting you down as they already guaranteed the success. The specialists likewise keep step with the foremost up and returning test thus on provide the larger part of updated dumps. 3 Months free access to updates is provided from the date of purchase. every one will bear the price of the 000-634 exam dumps through killexams.com at an occasional value. Often there's a markdown for anybody all. killexams.com Discount Coupons and Promo Codes are as under; WC2017 : 60% Discount Coupon for all exams on website PROF17 : 10% Discount Coupon for Orders larger than $69 DEAL17 : 15% Discount Coupon for Orders larger than $99 SEPSPECIAL : 10% Special Discount Coupon for All Orders

It is vital to bring together to the manual cloth on the off risk that one needs closer to spare time. As you require bunches of time to search for updated and proper research material for taking the IT certification exam. In the occasion which you locate that at one location, what will be advanced to this? Its just killexams.com that has what you require. You can spare time and keep away from trouble at the off risk that you buy Adobe IT certification from their web page.

You ought to get the most updated IBM 000-634 Braindumps with the right solutions, which can be installation by using killexams.com professionals, allowing the possibility to get a handle on getting to know about their 000-634 exam direction in the best, you will not discover 000-634 results of such great anyplace inside the marketplace. Their IBM 000-634 Practice Dumps are given to applicants at appearing 100% of their exam. Their IBM 000-634 exam dumps are most current in the market, permitting you to get ready in your 000-634 exam in the perfect manner.

In the occasion that you are keen on effectively Passing the IBM 000-634 exam to start shopping? killexams.com has riding facet created IBM exam addresses to be able to assure you pass this 000-634 exam! killexams.com conveys you the most actual, gift and maximum recent updated 000-634 exam questions and reachable with a a hundred% unconditional guarantee. There are many corporations that supply 000-634 brain dumps but the ones are not unique and most recent ones. Arrangement with killexams.com 000-634 new questions is a most best method to pass this certification exam in easy way.

We are for the most component very plenty conscious that a noteworthy difficulty inside the IT commercial enterprise is that there's a lack of price contemplate materials. Their exam prep material offers you all that you have to take a certification exam. Their IBM 000-634 Exam will come up with exam questions with showed answers that replicate the actual exam. These questions and answers provide you with the enjoy of taking the real exam. High quality and incentive for the 000-634 Exam. 100% assurance to pass your IBM 000-634 exam and get your IBM affirmation. They at killexams.com are resolved to enable you to pass your 000-634 exam exam with excessive ratings. The odds of you neglecting to pass your 000-634 exam, in the wake of experiencing their far achieving exam dumps are almost nothing.

killexams.com top price 000-634 exam simulator is extraordinarily encouraging for their clients for the exam prep. Immensely essential questions, references and definitions are featured in brain dumps pdf. Social occasion the information in one vicinity is a genuine assist and causes you get prepared for the IT certification exam inside a short time frame traverse. The 000-634 exam offers key focuses. The killexams.com pass4sure dumps retains the critical questions or thoughts of the 000-634 exam

At killexams.com, they give completely surveyed IBM 000-634 making ready assets which can be the exceptional to pass 000-634 exam, and to get certified by way of IBM. It is a pleasant choice to speed up your position as an professional in the Information Technology enterprise. They are pleased with their notoriety of assisting individuals pass the 000-634 test in their first attempt. Their prosperity fees inside the previous years were absolutely great, due to their upbeat clients who're currently prepared to impel their positions inside the speedy tune. killexams.com is the primary selection among IT experts, particularly the ones who're hoping to transport up the progression qualifications faster of their person institutions. IBM is the business pioneer in facts innovation, and getting certified through them is an ensured approach to prevail with IT positions. They allow you to do actually that with their fantastic IBM 000-634 exam prep dumps.

killexams.com Huge Discount Coupons and Promo Codes are as below;
WC2017 : 60% Discount Coupon for all tests on website
PROF17 : 10% Discount Coupon for Orders extra than $69
DEAL17 : 15% Discount Coupon for Orders extra than $99
DECSPECIAL : 10% Special Discount Coupon for All Orders


IBM 000-634 is rare everywhere in the globe, and the enterprise and programming preparations gave by them are being grasped by every one of the companies. They have helped in riding a large range of companies on the beyond any doubt shot way of success. Far accomplishing gaining knowledge of of IBM objects are regarded as a vital functionality, and the professionals showed by way of them are noticeably esteemed in all institutions.

000-634 | 000-634 | 000-634 | 000-634 | 000-634 | 000-634


Killexams 70-537 practice test | Killexams HP2-Q03 study guide | Killexams 1Z0-448 Practice Test | Killexams 000-715 exam prep | Killexams HP5-H05D practice questions | Killexams 4A0-110 exam questions | Killexams M2010-719 real questions | Killexams HP2-E13 dumps | Killexams HP0-J45 practice exam | Killexams 000-562 questions and answers | Killexams 000-002 braindumps | Killexams 000-107 practice questions | Killexams 642-964 braindumps | Killexams FC0-U51 test questions | Killexams 920-505 cram | Killexams CPEA free pdf | Killexams 000-593 practice test | Killexams HIO-201 braindumps | Killexams 000-418 brain dumps | Killexams 10-184 bootcamp |


killexams.com huge List of Exam Braindumps

View Complete list of Killexams.com Brain dumps


Killexams CN0-201 free pdf download | Killexams 351-001 practice questions | Killexams HP5-T01D braindumps | Killexams 000-188 practice test | Killexams 000-278 exam prep | Killexams AP0-001 bootcamp | Killexams 000-652 free pdf | Killexams 190-841 cheat sheets | Killexams CLEP study guide | Killexams C2030-280 test prep | Killexams 9A0-152 real questions | Killexams COG-612 test prep | Killexams 050-565 examcollection | Killexams CBCP real questions | Killexams NS0-920 practice test | Killexams 000-600 Practice Test | Killexams HP0-M45 real questions | Killexams 70-536-VB VCE | Killexams 106 dump | Killexams 9A0-036 braindumps |


Object Oriented Analysis and Design - Part 2

Pass 4 sure 000-634 dumps | Killexams.com 000-634 real questions | http://smresidences.com.ph/

MET CS 770 Object-Oriented Analysis & Design | killexams.com real questions and Pass4sure dumps

Last updated: November 13, 2002 Recent updates are often in red.

Contacting Eric Braude changed if this is red Materials changed if this is red Forums changed if this is red Overview changed if this is red Grading changed if this is red Project Organization changed if this is red Homework and Due Dates changed if this is red        Phase 3 Required Background changed if this is red Learning Objectives changed if this is red Syllabus and Dates for Classes changed if this is red Overview

A major engineering problem today is the predictable development of reliable software-intensive systems. The object-oriented paradigm is an important part of such development.

Object-oriented methods can be divided into languages, distribution, and analysis and design. There change in the language category, particularly Java and C#. Distribution includes the use of vendor libraries of classes and also distributed objects as specified by the Object Management Group etc.  Basic to the entire enterprise, however, are analysis and design, which has remained remarkable stable for years. Object-Oriented Analysis and Design includes the overall goals of the object paradigm, the selection of classes, the relationships among them, and their utilization to implement systems.

Required Background

A knowledge of C++ or Java (MET CS 565) and software engineering methods (MET CS 673) are required.   It is preferable to have taken Design Patterns (MET CS 665).

Materials and references

The recommended textbook is “Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design, and the Unified Process ” by Larman (Prentice Hall) 2nd edition, Published July 2001, 627 pages, ISBN 0130925691.  This is the first time that this instructor has used this book, and it is not clear how much the book will be used.

The instructor will provide notes for all classes.

Other references:

  • The Unified Modeling Language User Guide by Booch et al (Prentice Hall) ISBN0-201-57168-4
  • The Unified Modeling Language Reference Manual James Rumbaugh, Ivar Jacobson, Grady Booch Addison-Wesley Pub Co; ISBN: 020130998X
  • Design Patterns by Gamma et al
  • Object-Oriented Software Engineering by I Jacobson
  • Object-Oriented Analysis & Design by G. Booch
  • Modeling the world in data by S. Schlaer and S. Mellor
  • Modeling the world in states by S. Schlaer and S. Mellor
  • The Unified Method draft www.rational.com
  • Object-oriented Analysis by P. Coad and E. Yourdon
  • Object-oriented Design by P. Coad and E. Yourdon
  • Object-oriented Programming by P. Coad and A Nicola
  • Software Engineering: An Object-Oriented Perspective by Eric Braude
  • Learning Objectives

    Students will be able to …

  • … analyze problems from an object perspective
  • … create OO designs which are ready for coding
  • … implement a pilot OO project
  • Grading

    The course will consist of homework and a project, weighted as follows:

    1.      Homework:                  30%

    2.      Project:                        70%

    There are three phases for the project, graded as follows:

  • phase 1 (problem statement):                            1/9
  • phase 2 (analysis):                                             2/9
  • phase 3 (design):                                               1/3
  • phase 4 (implementation and critical review): 1/3
  • Parts are evaluated equally unless otherwise stated.

    Late homework is not accepted unless there is a reason why it was impossible for you. If there is such an impossibility, the work will be graded on a pass/fail basis.

    Project Organization

    You will be required to submit an analyzed, designed and implemented project according to the deadlines shown in the schedule. Detailed requirements will follow.

    With the instructor’s permission, it may be possible to substitute all or part of the project with an investigation of tools for OOA&D such as Rational Rose or Together.  This will require a detailed evaluation and an investigation of how these tools are being used extensively in a particular company.

    Teams two are permitted, and will be evaluated at a higher standard. All members must know all parts.

    You will be required to give a presentation on at least two of the phases in your project.

    Syllabus:

    This syllabus is subject to about 15% modification.

    The order of topics will be driven by the notes, which the instructor will hand out, not by the textbook. The textbook will serve as background and reference.

    Wk. Date Topic Text

    chapters

    Project

    Times are approximate.  See “date homework due” section for final dates

    1 9/3
  • Review Syllabus
  • Review Software Development Process
  • Notes 0-1 Phase 1 assigned 2 9/10
  • Introduction, Overview, and Goals of Design
  • UML as required
  • Extreme programming and refactoring
  • Notes 1-3 3 9/17
  • Requirements I: Use Cases
  • Notes 13 part 1 Presentations;

    Assign phase 2

    4 9/24
  • Requirements II: Sequence Diagrams
  • Notes 13 part 2 Phase 1 due; 5 10/1
  • Requirements III:  Completing Domain Classes
  • Writing Detailed Requirements
  • Review Student Designs
  • Notes 13 part 3

    Larman 10

    6 10/8 Notes 14 part 1 Assign phase 3 7 10/22 To be determined Presentations; Phase 2 due; 8 10/29
  • Review Design Patterns as required
  • Discussion of Tools
  • Review Student Designs
  • Notes 4-6 9 11/5
  • Frameworks
  • Review Student Designs
  • Presentations on architectures 10 11/12
  • Design Topics
  • Review Student Designs
  • Notes 14 part 2 Assign phase 4

    Phase 3 due

    11 11/19 Presentations on detailed designs 12 11/26
  • Detailed Design
  • Review Student Designs
  • Presentations 13 12/3
  • Implementing OO designs
  • Shlaer-Mellor
  • Presentation of results (1 of 2) 14 12/10
  • Presentations on Finished Applications
  • Phase 4 due Presentation of results (2 of 2)
  • Notes are from Software Design (Braude, to be published by Wiley in March 2002)
  • ** Applying UML and Patterns: … (Larman)
  • Dates Homework is due

    Num-ber Name Due date Project phase 1 9/24 1 “Design Issues” 9/17 1 3.4 (Pass Fail) 9/17 Project phase 2: (10/2/2002

    )

    1.Attach first a copy of your phase 1.  Respond specifically to whatever comments I may have made on your phase 1.   You can write these directly on the copy.

    2.

    Show the sequence diagrams for at least the two use cases you have introduced.  Key them to the use case steps, which you should number.3.List requirements by “domain class” paragraphs, including

    — The testable functionality that the application will definitely accomplish

    –What you would like to have the application accomplish if time permits

    Criterion: a. Requirements clearly written. (A = very clear description of application’s goals; no detail omitted)

    4.Provide a class diagram for your project consisting of all of the domain classes as well as the domain packages that you will use.

    Criteria:

    b. Clarity and completeness Sufficiency of key classes for committed requirements and use cases (A = very clear class meanings; no domain class missing no other domain classes required)

    g. Economy (A = no redundancy at all in the class model)

    Here are some typical improvements.

    Most room for improvement

    1.      Make your domain names specific to your application; e.g., PetStoreTransaction, FootballGame, FootballTeam rather than Transaction or Game or Team.

    2.      Use the “entities” section correctly.  This applies when there are specific entities that the application is required to have. It does not include entities that will be created at runtime that you can’t specify entirely at requirements time.

    3.      Many internal classes have corresponding GUI classes.  For example, PetStoreAccount entities may get their data from a PetStoreAccountGUI entity.  Specify the latter in its own category rather than under PetStoreAccount.

    4.      In your requirements, distinguish between the initiator and the substance of functionality.

    For example, under “Courses” a functionality might be “12.1.5 The application shall be able to display the catalog description of each course in the following format …”  (Corresponds to class Course).  Under the “Course GUI” paragraph an event might be “When the display course button is pressed, the functionality described in section 12.1.5 is initated.”  Under the “Student GUI” paragraph an event might be “When the show course button is pressed, the functionality described in section 12.1.5 is initated.” Etc.

    Do not say “12.1.5 When the display course button is pressed on the Course GUI, the application can display the catalog description of each course in the following format …”  Otherwise you will have a maintenance nightmare and a poor mapping to the design and implementation.

    5.

    Room for improvement

    1. Most

    2.

    3.

    4.

    5.

    6.

    7.

    objects are not sensitive to events unless they are GUI objects.  Buttons are examples.  Many objects have functionality that may be invoked as a result of an event on an

    other object.  For example, a customer’s information may be displayed when the button is clicked.  But “display” is a function of Customer: Any one of clients can invoke it, some event-sensitive and others not.  The object with (direct) event reaction is the button, not the customer.

    2. In your requirements document, don’t say “The customer shall include a name …” (which is strange English).  Instead: “The application shall maintain the name of customers ….”

    3. Distinguish between objects and object aggregates.  For example, you could have a “Customers” requirements paragraph with functionality such as “App shall be able to send a customer profile to the central database.”  This will correspond to a class Customer.  You could also have a “Customer List”  paragraph with functionality such as “It shall be possible to add new customers …”  This will correspond to a class such as CustomerList.

    4. Don’t waste words. In particular, give a sentence or two under each paragraph that adds value.

    NOT:

    1.4 Customers

    This section describes the requirements for customers.

    BUT

    1.4 Customers

    The application shall track the customers of the video store as follows. …

    1.

    10/22 3 Clown problem 10/9/02

    Draw a class model for an application for drawing human figures.  The picture shown is a typical product of the application.  The figures are always neck-upward; mouths are always lines, necks always rectangles, etc. – the shapes that appear in the figure.  Assume that the business will never change — but they want to be able to easily upgrade the shop’s capability within these constraints (e.g., draw necks with various colors, new kinds of border lines).  The class model should make figure drawing convenient (e.g., allowing the retrieval of previously constructed figure parts). Show attributes or operations whenever they clarify your solution.  Include useful abstractions (but to extend the current business).

    There is no requirement to take into account the GUI for the application (icons, menu’s etc.)

    Here is a scenario:

    The user … pulls onto the monitor “abeLincolnFace14” (which excludes the ears and neck)

    … adds “ear123” on the left by dragging to its vicinity and releasing

    The application places ear123 in a correct position

    The user invokes the “complete with suitable parts” command.

    The application

    … completes the figure with a neck and hat that it considers most suitable.

    … creates an ear on the right, complete with matching position, interior texture and color, and styles of border lines

    Criteria: a. completeness relative to requirements (A = sufficient classes for requirements, including appropriate generalizations)

    b. economy of classes (A = no more than necessary for requirements)

    10/29 4 14.1 – 14.6 11/5 see more below see below

    Project Phase 3: Due 11/12

    1.  Attach a copy of your phase 2 as graded by me, with specific responses to whatever comments I may have made on your phase 2.

    2. Provide a class diagram for your project, showing inheritance and aggregation.  Show key methods, key dependencies, and inheritance and aggregation.   Use your packages and Facades to avoid a single overwhelming figure.

    3. Show at least one additional model that completes your design.

    Criteria:

    a. Clarity of the model (A = very clear class meanings; very clear organization; no unnecessary details)

    b. Adequacy of class model for effecting the requirements.  (A= detailed enough to clearly allow an implementation that satisfies the requirements.)

    g. Completeness **** of models to specify the entire design. (A=right models selected; clearly no gaps in description)

    Most room for improvement

    1. If you use a data flow diagram, indicate the data types that flow.

    2. If you use a data flow diagram, indicate the functionality at each processing node.

    3. In the interest of clarity, show the relationships among the packages.  You can employ <<uses>> relationships.  Omit the classes from such a figure.

    Room for improvement

    1. In this course they did not give meaning to solid lines with arrows.  Explain what you mean by them, or don’t use them.

    2. Be specific about associations: Do you mean two-way aggregations?

    3. You have introduced a class whose name does not indicate a clear purpose and which is not a domain class.  Explain it’s purpose.

    A Little room for improvement

    1. …..

    Project Phase 4:     Due 12/10

    Section 1 Attach Phases 2 and 3. Response to my comments on phase 3. ( not graded, but required)

    Section 2 Show representative input and output.

    Section 3 Explain the application of all of the steps covered in the notes — explain if they did not apply.

    (criterion: a. Clarity and completeness — A = all relevant steps thoroughly implemented where applicable and explained where not)

    Section 4 Provide a complete class diagram and other appropriate model(s), building on the models you submitted for phase 3.

    (criterion: b. clarity and completeness — A = very clearly chosen and arranged models)

    Section 5 Account of the degree to which you accomplished your requirements as given in phase 2.  Please refer to them by number (e.g., 11.3.5).

    (criterion: g. degree of accomplishment.  A = excellent functional capabilities for a graduate course)

    Section 6. Source code.

    (d. criterion: clarity — A = extremely clear layout & code; each part easily traceable to the corresponding design element)

    Please …

    note that your class diagrams and code must be consistent;

    indicate all differences with prior design decisions;

    indicate all sections using numbered tabs (e.g., Post-it notes)

    Forums — past and present

    Fall 2001

    Fall 2002 email to the group is: 770F02@yahoogroups.com


    Object-oriented design patterns in the kernel, part 2 | killexams.com real questions and Pass4sure dumps

    LWN.net needs you!

    Without subscribers, LWN would simply not exist. Please consider signing up for a subscription and helping to keep LWN publishing

    June 7, 2011

    This article was contributed by Neil Brown

    In the first part of this analysis they looked at how the polymorphic side of object-oriented programming was implemented in the Linux kernel using regular C constructs. In particular they examined method dispatch, looked at the different forms that vtables could take, and the circumstances where separate vtables were eschewed in preference for storing function pointers directly in objects. In this conclusion they will explore a second important aspect of object-oriented programming - inheritance, and in particular data inheritance.

    Data inheritance

    Inheritance is a core concept of object-oriented programming, though it comes in many forms, whether prototype inheritance, mixin inheritance, subtype inheritance, interface inheritance etc., some of which overlap. The form that is of interest when exploring the Linux kernel is most like subtype inheritance, where a concrete or "final" type inherits some data fields from a "virtual" parent type. They will call this "data inheritance" to emphasize the fact that it is the data rather than the behavior that is being inherited.

    Put another way, a number of different implementations of a particular interface share, and separately extend, a common data structure. They can be said to inherit from that data structure. There are three different approaches to this sharing and extending that can be found in the Linux kernel, and all can be seen by exploring the struct inode structure and its history, though they are widely used elsewhere.

    Extension through unions

    The first approach, which is probably the most obvious but also the least flexible, is to declare a union as one element of the common structure and, for each implementation, to declare an entry in that union with extra fields that the particular implementation needs. This approach was introduced to struct inode in Linux-0.97.2 (August 1992) when

    union { struct minix_inode_info minix_i; struct ext_inode_info ext_i; struct msdos_inode_info msdos_i; } u;

    was added to struct inode. Each of these structures remained empty until 0.97.5 when i_data was moved from struct inode to struct ext_inode_info. Over the years several more "inode_info" fields were added for different filesystems, peaking at 28 different "inode_info" structures in 2.4.14.2 when ext3 was added.

    This approach to data inheritance is simple and straightforward, but is also somewhat clumsy. There are two obvious problems. Firstly, every new filesystem implementation needs to add an extra field to the union "u". With 3 fields this may not seem like a problem, with 28 it was well past "ugly". Requiring every filesystem to update this one structure is a barrier to adding filesystems that is unnecessary. Secondly, every inode allocated will be the same size and will be large enough to store the data for any filesystem. So a filesystem that wants lots of space in its "inode_info" structure will impose that space cost on every other filesystem.

    The first of these issues is not an impenetrable barrier as they will see shortly. The second is a real problem and the general ugliness of the design encouraged change. Early in the 2.5 development series this change began; it was completed by 2.5.7 when there were no "inode_info" structures left in union u (though the union itself remained until 2.6.19).

    Embedded structures

    The change that happened to inodes in early 2.5 was effectively an inversion. The change which removed ext3_i from struct inode.u also added a struct inode, called vfs_inode, to struct ext3_inode_info. So instead of the private structure being embedded in the common data structure, the common data structure is now embedded in the private one. This neatly avoids the two problems with unions; now each filesystem needs to only allocate memory to store its own structure without any need to know anything about what other filesystems might need. Of course nothing ever comes for free and this change brought with it other issues that needed to be solved, but the solutions were not costly.

    The first difficulty is the fact that when the common filesystem code - the VFS layer - calls into a specific filesystem it passes a pointer to the common data structure, the struct inode. Using this pointer, the filesystem needs to find a pointer to its own private data structure. An obvious approach is to always place the struct inode at the top of the private inode structure and simply cast a pointer to one into a pointer to the other. While this can work, it lacks any semblance of type safety and makes it harder to arrange fields in the inode to get optimal performance - as some kernel developers are wont to do.

    The solution was to use the list_entry() macro to perform the necessary pointer arithmetic, subtracting from the address of the struct inode its offset in the private data structure and then casting this appropriately. The macro for this was called list_entry() simply because the "list.h lists" implementation was the first to use this pattern of data structure embedding. The list_entry() macro did exactly what was needed and so it was used despite the strange name. This practice lasted until 2.5.28 when a new container_of() macro was added which implemented the same functionality as list_entry(), though with slightly more type safety and a more meaningful name. With container_of() it is a simple matter to map from an embedded data structure to the structure in which it is embedded.

    The second difficulty was that the filesystem had to be responsible for allocating the inode - it could no longer be allocated by common code as the common code did not have enough information to allocate the correct amount of space. This simply involved adding alloc_inode() and destroy_inode() methods to the super_operations structure and calling them as appropriate.

    Void pointers

    As noted earlier, the union pattern was not an impenetrable barrier to adding new filesystems independently. This is because the union u had one more field that was not an "inode_info" structure. A generic pointer field called generic_ip was added in Linux-1.0.5, but it was not used until 1.3.7. Any file system that does not own a structure in struct inode itself could define and allocate a separate structure and link it to the inode through u.generic_ip. This approach addressed both of the problems with unions as no changes are needed to shared declarations and each filesystem only uses the space that it needs. However it again introduced new problems of its own.

    Using generic_ip, each filesystem required two allocations for each inode instead of one and this could lead to more wastage depending on how the structure size was rounded up for allocation; it also required writing more error-handling code. Also there was memory used for the generic_ip pointer and often for a back pointer from the private structure to the common struct inode. Both of these are wasted space compared with the union approach or the embedding approach.

    Worse than this though, an extra memory dereference was needed to access the private structure from the common structure; such dereferences are best avoided. Filesystem code will often need to access both the common and the private structures. This either requires lots of extra memory dereferences, or it requires holding the address of the private structure in a register which increases register pressure. It was largely these concerns that stopped struct inode from ever migrating to broad use of the generic_ip pointer. It was certainly used, but not by the major, high-performance filesystems.

    Though this pattern has problems it is still in wide use. struct super_block has an s_fs_info pointer which serves the same purpose as u.generic_ip (which has since been renamed to i_private when the u union was finally removed - why it was not completely removed is left as an exercise for the reader). This is the only way to store filesystem-private data in a super_block. A simple search in the Linux include files shows quite a collection of fields which are void pointers named "private" or something similar. Many of these are examples of the pattern of extending a data type by using a pointer to a private extension, and most of these could be converted to using the embedded-structure pattern.

    Beyond inodes

    While inodes serve as an effective vehicle to introduce these three patterns they do not display the full scope of any of them so it is useful to look further afield and see what else they can learn.

    A survey of the use of unions elsewhere in the kernel shows that they are widely used though in very different circumstances than in struct inode. The particular aspect of inodes that is missing elsewhere is that a wide range of different modules (different filesystems) each wanted to extend an inode in different ways. In most places where unions are used there are a small fixed number of subtypes of the base type and there is little expectation of more being added. A simple example of this is struct nfs_fattr which stores file attribute information decoded out of an NFS reply. The details of these attributes are slightly different for NFSv2 and NFSv3 so there are effectively two subtypes of this structure with the difference encoded in a union. As NFSv4 uses the same information as NFSv3 this is very unlikely to ever be extended further.

    A very common pattern in other uses of unions in Linux is for encoding messages that are passed around, typically between the kernel and user-space. struct siginfo is used to convey extra information with a signal delivery. Each signal type has a different type of ancillary information, so struct siginfo has a union to encode six different subtypes. union inputArgs appears to be the largest current union with 22 different subtypes. It is used by the "coda" network file system to pass requests between the kernel module and a user-space daemon which handles the network communication.

    It is not clear whether these examples should be considered as the same pattern as the original struct inode. Do they really represent different subtypes of a base type, or is it just one type with internal variants? The Eiffel object-oriented programming language does not support variant types at all except through subtype inheritance so there is clearly a school of thought that would want to treat all usages of union as a form of subtyping. Many other languages, such as C++, provide both inheritance and unions allowing the programmer to make a choice. So the answer is not clear.

    For their purposes it doesn't really matter what they call it as long as they know where to use each pattern. The examples in the kernel fairly clearly show that when all of the variants are understood by a single module, then a union is a very appropriate mechanism for variants structures, whether you want to refer to them as using data inheritance or not. When different subtypes are managed by different modules, or at least widely separate pieces of code, then one of the other mechanisms is preferred. The use of unions for this case has almost completely disappeared with only struct cycx_device remaining as an example of a deprecated pattern.

    Problems with void pointers

    Void pointers are not quite so easy to classify. It would probably be fair to say that void pointers are the modern equivalent of "goto" statements. They can be very useful but they can also lead to very convoluted designs. A particular problem is that when you look at a void pointer, like looking at a goto, you don't really know what it is pointing at. A void pointer called private is even worse - it is like a "goto destination" command - almost meaningless without reading lots of context.

    Examining all the different uses that void pointers can be put to would be well beyond the scope of this article. Instead they will restrict their attention to just one new usage which relates to data inheritance and illustrates how the untamed nature of void pointers makes it hard to recognize their use in data inheritance. The example they will use to explain this usage is struct seq_file used by the seq_file library which makes it easy to synthesize simple text files like some of those in /proc. The "seq" part of seq_file simply indicates that the file contains a sequence of lines corresponding to a sequence of items of information in the kernel, so /proc/mounts is a seq_file which walks through the mount table reporting each mount on a single line.

    When seq_open() is used to create a new seq_file it allocates a struct seq_file and assigns it to the private_data field of the struct file which is being opened. This is a straightforward example of void pointer based data inheritance where the struct file is the base type and the struct seq_file is a simple extension to that type. It is a structure that never exists by itself but is always the private_data for some file. struct seq_file itself has a private field which is a void pointer and it can be used by clients of seq_file to add extra state to the file. For example md_seq_open() allocates a struct mdstat_info structure and attaches it via this private field, using it to meet md's internal needs. Again, this is simple data inheritance following the described pattern.

    However the private field of struct seq_file is used by svc_pool_stats_open() in a subtly but importantly different way. In this case the extra data needed is just a single pointer. So rather than allocating a local data structure to refer to from the private field, svc_pool_stats_open simply stores that pointer directly in the private field itself. This certainly seems like a sensible optimization - performing an allocation to store a single pointer would be a waste - but it highlights exactly the source of confusion that was suggested earlier: that when you look at a void pointer you don't really know what is it pointing at, or why.

    To make it a bit clearer what is happening here, it is helpful to imagine "void *private" as being like a union of every different possible pointer type. If the value that needs to be stored is a pointer, it can be stored in this union following the "unions for data inheritance" pattern. If the value is not a single pointer, then it gets stored in allocated space following the "void pointers for data inheritance" pattern. Thus when they see a void pointer being used it may not be obvious whether it is being used to point to an extension structure for data inheritance, or being used as an extension for data inheritance (or being used as something else altogether).

    To highlight this issue from a slightly different perspective it is instructive to examine struct v4l2_subdev which represents a sub-device in a video4linux device, such as a sensor or camera controller within a webcam. According to the (rather helpful) documentation it is expected that this structure will normally be embedded in a larger structure which contains extra state. However this structure still has not just one but two void pointers, both with names suggesting that they are for private use by subtypes:

    /* pointer to private data */ void *dev_priv; void *host_priv;

    It is common that a v4l sub-device (a sensor, usually) will be realized by, for example, an I2C device (much as a block device which stores your filesystem might be realized by an ATA or SCSI device). To allow for this common occurrence, struct v4l2_subdev provides a void pointer (dev_priv), so that the driver itself doesn't need to define a more specific pointer in the larger structure which struct v4l2_subdev would be embedded in. host_priv is intended to point back to a "parent" device such as a controller which acquires video data from the sensor. Of the three drivers which use this field, one appears to follow that intention while the other two use it to point to an allocated extension structure. So both of these pointers are intended to be used following the "unions for data inheritance" pattern, where a void pointer is playing the role of a union of many other pointer types, but they are not always used that way.

    It is not immediately clear that defining this void pointer in case it is useful is actually a valuable service to provide given that the device driver could easily enough define its own (type safe) pointer in its extension structure. What is clear is that an apparently "private" void pointer can be intended for various qualitatively different uses and, as they have seen in two different circumstances, they may not be used exactly as expected.

    In short, recognizing the "data inheritance through void pointers" pattern is not easy. A fairly deep examination of the code is needed to determine the exact purpose and usage of void pointers.

    A diversion into struct page

    Before they leave unions and void pointers behind a look at struct page may be interesting. This structure uses both of these patterns, though they are hidden somewhat due to historical baggage. This example is particularly instructive because it is one case where struct embedding simply is not an option.

    In Linux memory is divided into pages, and these pages are put to a variety of different uses. Some are in the "page cache" used to store the contents of files. Some are "anonymous pages" holding data used by applications. Some are used as "slabs" and divided into pieces to answer kmalloc() requests. Others are simply part of a multi-page allocation or maybe are on a free list waiting to be used. Each of these different use cases could be seen as a subtype of the general class of "page", and in most cases need some dedicated fields in struct page, such as a struct address_space pointer and index when used in the page cache, or struct kmem_cache and freelist pointers when used as a slab.

    Each page always has the same struct page describing it, so if the effective type of the page is to change - as it must as the demands for different uses of memory change over time - the type of the struct page must change within the lifetime of that structure. While many type systems are designed assuming that the type of an object is immutable, they find here that the kernel has a very real need for type mutability. Both unions and void pointers allow types to change and as noted, struct page uses both.

    At the first level of subtyping there are only a small number of different subtypes as listed above; these are all known to the core memory management code, so a union would be ideal here. Unfortunately struct page has three unions with fields for some subtypes spread over all three, thus hiding the real structure somewhat.

    When the primary subtype in use has the page being used in the page cache, the particular address_space that it belongs to may want to extend the data structure further. For this purpose there is a private field that can be used. However it is not a void pointer but is an unsigned long. Many places in the kernel assume an unsigned long and a void * are the same size and this is one of them. Most users of this field actually store a pointer here and have to cast it back and forth. The "buffer_head" library provides macros attach_page_buffers and page_buffers to set and get this field.

    So while struct page is not the most elegant example, it is an informative example of a case where unions and void pointers are the only option for providing data inheritance.

    The details of structure embedding

    Where structure embedding can be used, and where the list of possible subtypes is not known in advance, it seems to be increasingly the preferred choice. To gain a full understanding of it they will again need to explore a little bit further than inodes and contrast data inheritance with other uses of structure embedding.

    There are essentially three uses for structure embedding - three reasons for including a structure within another structure. Sometimes there is nothing particularly interesting going on. Data items are collected together into structures and structures within structures simply to highlight the closeness of the relationships between the different items. In this case the address of the embedded structure is rarely taken, and it is never mapped back to the containing structure using container_of().

    The second use is the data inheritance embedding that they have already discussed. The third is like it but importantly different. This third use is typified by struct list_head and other structs used as an embedded anchor when creating abstract data types.

    The use of an embedded anchor like struct list_head can be seen as a style of inheritance as the structure containing it "is-a" member of a list by virtue of inheriting from struct list_head. However it is not a strict subtype as a single object can have several struct list_heads embedded - struct inode has six (if they include the similar hlist_node). So it is probably best to think of this sort of embedding more like a "mixin" style of inheritance. The struct list_head provides a service - that of being included in a list - that can be mixed-in to other objects, an arbitrary number of times.

    A key aspect of data inheritance structure embedding that differentiates it from each of the other two is the existence of a reference counter in the inner-most structure. This is an observation that is tied directly to the fact that the Linux kernel uses reference counting as the primary means of lifetime management and so would not be shared by systems that used, for example, garbage collection to manage lifetimes.

    In Linux, every object with an independent existence will have a reference counter, sometimes a simple atomic_t or even an int, though often a more explicit struct kref. When an object is created using several levels of inheritance the reference counter could be buried quite deeply. For example a struct usb_device embeds a struct device which embeds struct kobject which has a struct kref. So usb_device (which might in turn be embedded in a structure for some specific device) does have a reference counter, but it is contained several levels down in the nest of structure embedding. This contrasts quite nicely with a list_head and similar structures. These have no reference counter, have no independent existence and simply provide a service to other data structures.

    Though it seems obvious when put this way, it is useful to remember that a single object cannot have two reference counters - at least not two lifetime reference counters (It is fine to have two counters like s_active and s_count in struct super_block which count different things). This means that multiple inheritance in the "data inheritance" style is not possible. The only form of multiple inheritance that can work is the mixin style used by list_head as mentioned above.

    It also means that, when designing a data structure, it is important to think about lifetime issues and whether this data structure should have its own reference counter or whether it should depend on something else for its lifetime management. That is, whether it is an object in its own right, or simply a service provided to other objects. These issues are not really new and apply equally to void pointer inheritance. However an important difference with void pointers is that it is relatively easy to change your mind later and switch an extension structure to be a fully independent object. Structure embedding requires the discipline of thinking clearly about the problem up front and making the right decision early - a discipline that is worth encouraging.

    The other key telltale for data inheritance structure embedding is the set of rules for allocating and initializing new instances of a structure, as has already been hinted at. When union or void pointer inheritance is used the main structure is usually allocated and initialized by common code (the mid-layer) and then a device specific open() or create() function is called which can optionally allocate and initialize any extension object. By contrast when structure embedding is used the structure needs to be allocated by the lowest level device driver which then initializes its own fields and calls in to common code to initialize the common fields.

    Continuing the struct inode example from above which has an alloc_inode() method in the super_block to request allocation, they find that initialization is provided for with inode_init_once() and inode_init_always() support functions. The first of these is used when the previous use of a piece of memory is unknown, the second is sufficient by itself when they know that the memory was previously used for some other inode. They see this same pattern of an initializer function separate from allocation in kobject_init(), kref_init(), and device_initialize().

    So apart from the obvious embedding of structures, the pattern of "data inheritance through structure embedding" can be recognized by the presence of a reference counter in the innermost structure, by the delegation of structure allocation to the final user of the structure, and by the provision of initializing functions which initialize a previously allocated structure.

    Conclusion

    In exploring the use of method dispatch (last week) and data inheritance (this week) in the Linux kernel they find that while some patterns seem to dominate they are by no means universal. While almost all data inheritance could be implemented using structure embedding, unions provide real value in a few specific cases. Similarly while simple vtables are common, mixin vtables are very important and the ability to delegate methods to a related object can be valuable.

    We also find that there are patterns in use with little to recommend them. Using void pointers for inheritance may have an initial simplicity, but causes longer term wastage, can cause confusion, and could nearly always be replaced by embedded inheritance. Using NULL pointers to indicate default behavior is similarly a poor choice - when the default is important there are better ways to provide for it.

    But maybe the most valuable lesson is that the Linux kernel is not only a useful program to run, it is also a useful document to study. Such study can find elegant practical solutions to real problems, and some less elegant solutions. The willing student can pursue the former to help improve their mind, and pursue the latter to help improve the kernel itself. With that in mind, the following exercises might be of interest to some.

    Exercises
  • As inodes now use structure embedding for inheritance, void pointers should not be necessary. Examine the consequences and wisdom of removing "i_private" from "struct inode".

  • Rearrange the three unions in struct page to just one union so that the enumeration of different subtypes is more explicit.

  • As was noted in the text, struct seq_file can be extended both through "void pointer" and a limited form of "union" data inheritance. Explain how seq_open_private() allows this structure to also be extended through "embedded structure" data inheritance and give an example by converting one usage in the kernel from "void pointer" to "embedded structure". Consider submitting a patch if this appears to be an improvement. Contrast this implementation of embedded structure inheritance with the mechanism used for inodes.

  • Though subtyping is widely used in the kernel, it is not uncommon for a object to contain fields that not all users are interested in. This can indicate that more fine grained subtyping is possible. As very many completely different things can be represented by a "file descriptor", it is likely that struct file could be a candidate for further subtyping.

    Identify the smallest set of fields that could serve as a generic struct file and explore the implications of embedding that in different structures to implement regular files, socket files, event files, and other file types. Exploring more general use of the proposed open() method for inodes might help here.

  • Identify an "object-oriented" language which has an object model that would meet all the needs of the Linux kernel as identified in these two articles.

  • (Log in to post comments)

    Java and Object-Oriented Programming | killexams.com real questions and Pass4sure dumps

    This chapter is from the book 

    Many seasoned Java developers will scoff at the fact that this section even exists in this book. It is here for two very important reasons. The first is that I continually run across Java applications built with a procedural mind-set. The fact that you know Java doesn't mean that you have the ability to transform that knowledge into well-designed object-oriented systems. As both an instructor and consultant, I see many data-processing shops send COBOL and/or Visual Basic developers to a three-day class on UML and a five-day class on Java and expect miracles. Case in point: I was recently asked to review a Java application to assess its design architecture and found that it had only two classes—SystemController and ScreenController—which contained over 70,000 lines of Java code.

    The second reason for the emphasis on how the language maps to object-oriented principles is that people like language comparisons and how they stack up to their counterparts. To appease those that live and die by language comparisons, let's put Java under the scrutiny of what constitutes an object-oriented language.

    No definitive definition of what makes a language object-oriented is globally accepted. However, a common set of criteria I personally find useful is that the language must support the following:

  • Classes
  • Complex types (Java reference types)
  • Message passing
  • Encapsulation
  • Inheritance
  • Polymorphism
  • These are discussed in the next subsections.

    Java and Classes

    Java allows classes to be defined. There are no stray functions floating around in Java. A class is a static template that contains the defined structure (attributes) and behavior (operations) of a real-world entity in the application domain. At runtime, the class is instantiated, or brought to life, as an object born in the image of that class. In my seminars, when several folks new to the object world are in attendance, I often use the analogy of a cookie cutter. The cookie cutter is merely the template used to stamp out what will become individually decorated and unique cookies. The cookie cutter is the class; the unique blue, green, and yellow gingerbread man is the object (which I trust supports a bite operation).

    Java exposes the class to potential outside users through its public interface. A public interface consists of the signatures of the public operations supported by the class. A signature is the operation name and its input parameter types (the return type, if any, is not part of the operation's signature).

    Good programming practice encourages developers to declare all attributes as private and allow access to them only via operations. As with most other languages, however, this is not enforced in Java. Figure 2-1 outlines the concept of a class and its interface.

    FIGURE 2-1 Public interface of a class

    The figure uses a common eggshell metaphor to describe the concept of the class's interface, as well as encapsulation. The internal details of the class are hidden from the outside via a well-defined interface. In this case, only four operations are exposed in the classes interface (Operation_A, B, C, and D). The other attributes and operations are protected from the outside world. Actually, to the outside world, it's as if they don't even exist.

    Suppose you want to create an Order class in Java that has three attributes—orderNumber, orderDate, and orderTotal—and two operations—calcTotalValue() and getInfo(). The class definition could look like this:

    /** * Listing 1 * This is the Order class for the Java/UML book */ package com.jacksonreed; import java.util.*; public class Order { private Date orderDate; private long orderNumber; private long orderTotal; public Order() { } public boolean getInfo() { return true; } public long calcTotalValue() { return 0; } public Date getOrderDate() { return orderDate; } public void setOrderDate(Date aOrderDate) { orderDate = aOrderDate; } public long getOrderNumber() { return orderNumber; } public void setOrderNumber(long aOrderNumber) { orderNumber = aOrderNumber; } public long getOrderTotal() { return orderTotal; } public void setOrderTotal(long aOrderTotal) { orderTotal = aOrderTotal; } public static void main(String[] args) { Order order = new Order(); System.out.println("instantiated Order"); System.out.println(order.getClass().getName()); System.out.println(order.calcTotalValue()); try { Thread.currentThread().sleep(5*1000); } catch(InterruptedException e) {} } }

    A few things are notable about the first bit of Java code presented in this book. Notice that each of the three attributes has a get and a set operation to allow for the retrieval and setting of the Order object's properties. Although doing so is not required, it is common practice to provide these accessor-type operations for all attributes defined in a class. In addition, if the Order class ever wanted to be a JavaBean, it would have to have "getters and setters" defined in this way.

    Some of the method code in the main() operation does a few things of note. Of interest is that a try block exists at the end of the operation that puts the current thread to sleep for a bit. This is to allow the console display to freeze so that you can see the results.

    If you type in this class and then compile it and execute it in your favorite development tool or from the command prompt with

    javac order.java //* to compile it java order //* to run it

    you should get results that look like this:

    instantiated Order com.jacksonreed.Order 0

    NOTE

    Going forward, I promise you will see no code samples with class, operation, or attribute names of foo, bar, or foobar.

    More on Java and Classes

    A class can also have what are called class-level operations and attributes. Java supports these with the static keyword. This keyword would go right after the visibility (public, private, protected) component of the operation or attribute. Static operations and attributes are needed to invoke either a service of the class before any real instances of that class are instantiated or a service that doesn't directly apply to any of the instances. The classic example of a static operation is the Java constructor. The constructor is what is called when an object is created with the New keyword. Perhaps a more business-focused example is an operation that retrieves a list of Customer instances based on particular search criteria.

    A class-level attribute can be used to store information that all instances of that class may access. This attribute might be, for example, a count of the number of objects currently instantiated or a property about Customer that all instances might need to reference.

    Java and Complex Types (Java Reference Types)

    A complex type, which in Java is called a reference type, allows variables typed as something other than primitive types (e.g., int and boolean) to be declared. In Java, these are called reference types. In object-oriented systems, variables that are "of" a particular class, such as Order, Customer, or Invoice, must be defined. Taken a step further, Order could consist of other class instances, such as OrderHeader and OrderLine.

    In Java, you can define different variables that are references to runtime objects of a particular class type:

    Public Order myOrder; Public Customer myCustomer; Public Invoice myInvoice;

    Such variables can then be used to store actual object instances and subsequently to serve as recipients of messages sent by other objects. In the previous code fragment, the variable myOrder is an instance of Order. After the myOrder object is created, a message can be sent to it and myOrder will respond, provided that the operation is supported by myOrder's interface.

    Java and Message Passing

    Central to any object-oriented language is the ability to pass messages between objects. In later chapters you will see that work is done in a system only by objects that collaborate (by sending messages) to accomplish a goal (which is specified in a use-case) of the system.

    Java doesn't allow stray functions floating around that are not attached to a class. In fact, Java demands this. Unfortunately, as my previous story suggested, just saying that a language requires everything to be packaged in classes doesn't mean that the class design will be robust, let alone correct.

    Java supports message passing, which is central to the use of Java's object-oriented features. The format closely resembles the syntax of other languages, such as C++ and Visual Basic. In the following code fragment, assume that a variable called myCustomer, of type Customer, is defined and that an operation called calcTotalValue() is defined for Customer. Then the calcTotalValue() message being sent to the myCustomer object in Java would look like this:

    myCustomer.calcTotalValue();

    Many developers feel that, in any other structured language, this is just a fancy way of calling a procedure. Calling a procedure and sending a message are similar in that, once invoked, both a procedure and a message implement a set of well-defined steps. However, a message differs in two ways:

  • There is a designated receiver, the object. Procedures have no designated receiver.

  • The interpretation of the message—that is, the how-to code (called the method) used to respond to the message—can vary with different receivers. This point will become more important later in the chapter, when polymorphism is reviewed.

  • The concepts presented in this book rely heavily on classes and the messaging that takes place between their instances, or objects.

    Java and Encapsulation

    Recall that a class exposes itself to the outside world via its public interface and that this should be done through exposure to operations only, and not attributes. Java supports encapsulation via its ability to declare both attributes and operations as public, private, or protected. In UML this is called visibility.

    Using the code from the previous Order example, suppose you want to set the value of the orderDate attribute. In this case, you should do so with an operation. An operation that gets or sets values is usually called a getter or a setter, respectively, and collectively such operations are called accessors. The local copy of the order date, orderDate, is declared private. (Actually, all attributes of a class should be declared private or protected, so that they are accessible only via operations exposed as public to the outside world.)

    Encapsulation provides some powerful capabilities. To the outside world, the design can hide how it derives its attribute values. If the orderTotal attribute is stored in the Order object, the corresponding get operation defined previously looks like this:

    public long getOrderTotal() { return orderTotal; }

    This snippet of code would be invoked if the following code were executed by an interested client:

    private long localTotal; private Order localOrder; localOrder = New Order(); localTotal = localOrder.getOrderTotal()

    However, suppose the attribute orderTotal isn't kept as a local value of the Order class, but rather is derived via another mechanism (perhaps messaging to its OrderLine objects). If Order contains OrderLine objects (declared as a Vector or ArrayList of OrderLine objects called myOrderLines) and OrderLine knows how to obtain its line totals via the message getOrderLineTotal(), then the corresponding get operation for orderTotal within Order will look like this:

    public long getOrderTotal() { long totalAmount=0; for (int i=0; i < myOrderLines.length; i++) { totalAmount = totalAmount + myOrderLines[i].getOrderLineTotal(); } return totalAmount; }

    This code cycles through the myOrderLines collection, which contains all the Orderline objects related to the Order object, sending the getOrderLineTotal() message to each of Order's OrderLine objects. The getOrderTotal() operation will be invoked if the following code is executed by an interested client:

    long localTotal; Order myOrder; myOrder = new Order(); localTotal = localOrder.getOrderTotal()

    Notice that the "client" code didn't change. To the outside world, the class still has an orderTotal attribute. However, you have hidden, or encapsulated, just how the value was obtained. This encapsulation allows the class's interface to remain the same (hey, I have an orderTotal that you can ask me about), while the class retains the flexibility to change its implementation in the future (sorry, how they do business has changed and now they must derive orderTotal like this). This kind of resiliency is one of the compelling business reasons to use an object-oriented programming language in general.

    Java and Inheritance

    The inclusion of inheritance is often the most cited reason for granting a language object-oriented status. There are two kinds of inheritance: interface and implementation. As they shall see, Java is one of the few languages that makes a clear distinction between the two.

    Interface inheritance (Figure 2-2) declares that a class that is inheriting an interface will be responsible for implementing all of the method code of each operation defined in that interface. Only the signatures of the interface are inherited; there is no method or how-to code.

    FIGURE 2-2 Interface inheritance

    Implementation inheritance (Figure 2-3) declares that a class that is inheriting an interface may, at its option, use the method code implementation already established for the interface. Alternatively, it may choose to implement its own version of the interface. In addition, the class inheriting the interface may extend that interface by adding its own operations and attributes.

    FIGURE 2-3 Implementation inheritance

    Each type of inheritance should be scrutinized and used in the appropriate setting. Interface inheritance is best used under the following conditions:

  • The base class presents a generic facility, such as a table lookup, or a derivation of system-specific information, such as operating-system semantics or unique algorithms.

  • The number of operations is small.

  • The base class has few, if any, attributes.

  • Classes realizing or implementing the interface are diverse, with little or no common code.

  • Implementation inheritance is best used under the following conditions:

  • The class in question is a domain class that is of primary interest to the application (i.e., not a utility or controller class).

  • The implementation is complex, with a large number of operations.

  • Many attributes and operations are common across specialized implementations of the base class.

  • Some practitioners contend that implementation inheritance leads to a symptom called the fragile base class problem. Chiefly, this term refers to the fact that over time, what were once common code and attributes in the superclass may not stay common as the business evolves. The result is that many, if not all, of the subclasses, override the behavior of the superclass. Worse yet, the subclasses may find themselves overriding the superclass, doing their own work, and then invoking the same operation again on the superclass. These practitioners espouse the idea of using only interface inheritance. Particularly with the advent of Java and its raising of the interface to a first-class type, the concept and usage of interface-based programming have gained tremendous momentum.

    As this book evolves, keeping in mind the pointers mentioned here when deciding between the two types of inheritance will be helpful. Examples of both constructs will be presented in the theme project that extends throughout this book.

    Implementation Inheritance

    Java supports implementation inheritance with the extends keyword. A class wanting to take advantage of implementation inheritance simply adds an extendsClassName statement to its class definition. To continue the previous example, suppose you have two different types of orders, both warranting their own subclasses: Commercial and Retail. You would still have an Order class (which isn't instantiated directly and which is called abstract). The previous fragment showed the code for the Order class. Following is the code for the Commercial class.

    package com.jacksonreed; public class Commercial extends Order { public Commercial() { } /* Unique Commercial code goes here */ }

    Implementation inheritance allows the Commercial class to utilize all attributes and operations defined in Order. This will be done automatically by the Java Virtual Machine (JVM) in conjunction with the language environment. In addition, implementation inheritance has the ability to override and/or extend any of Order's behavior. Commercial may also add completely new behavior if it so chooses.

    Interface Inheritance

    Java supports interface inheritance with the implements keyword. A class wanting to realize a given interface (actually being responsible for the method code) simply adds an implements InterfaceName statement. However, unlike extension of one class by another class, implementation of an interface by a class requires that the interface be specifically defined as an interface beforehand.

    Looking again at the previous example with Order, let's assume that this system will contain many classes—some built in this release, and some built in future releases—that need the ability to price themselves. Remember from earlier in this chapter that one of the indicators of using interface inheritance is the situation in which there is little or no common code but the functional intent of the classes is the same. This pricing functionality includes three services: the abilities to calculate tax, to calculate an extended price, and to calculate a total price. Let's call the operations for these services calcExtendedPrice(), calcTax(), and calcTotalPrice(), respectively, and assign them to a Java interface called IPrice. Sometimes interface names are prefixed with the letter I to distinguish them from other classes:

    package com.jacksonreed; interface IPrice { long calcExtendedPrice(); long calcTax(); long calcTotalPrice(); }

    Notice that the interface contains only operation signatures; it has no implementation code. It is up to other classes to implement the actual behavior of the operations. For the Order class to implement, or realize, the IPrice interface, it must include the implements keyword followed by the interface name:

    public class Order implements IPrice { }

    If you try to implement an interface without providing implementations for all of its operations, your class will not compile. Even if you don't want to implement any method code for some of the operations, you still must have the operations defined in your class.

    One very powerful aspect of interface inheritance is that a class can implement many interfaces at the same time. For example, Order could implement the IPrice interface and perhaps a search interface called ISearch. However, a Java class may extend from only one other class.

    Java and Polymorphism

    Polymorphism is one of those $50 words that dazzles the uninformed and sounds really impressive. In fact, polymorphism is one of the most powerful features of any object-oriented language.

    Roget's II: The New Thesaurus cross-references the term polymorphism to the main entry of variety. That will do for starters. Variety is the key to polymorphism. The Latin root for polymorphism means simply "many forms." Polymorphism applies to operations in the object-oriented context. So by combining these two thoughts, you could say that operations are polymorphic if they are identical (not just in name but also in signatures) but offer variety in their implementations.

    Polymorphism is the ability of two different classes each to have an operation that has the same signature, while having two very different forms of method code for the operation. Note that to take advantage of polymorphism, either an interface inheritance or an implementation inheritance relationship must be involved.

    In languages such as COBOL and FORTRAN, defining a routine to have the same name as another routine will cause a compile error. In object-oriented languages such as Java and C++, several classes might have an operation with the same signature. Such duplication is in fact encouraged because of the power and flexibility it brings to the design.

    As mentioned previously, the implements and extends keywords let the application take advantage of polymorphism. As they shall see, the sample project presented later in this book is an order system for a company called Remulak Productions. Remulak sells musical equipment, as well as other types of products. There will be a Product class, as well as Guitar, SheetMusic, and Supplies classes.

    Suppose, then, that differences exist in the fundamental algorithms used to determine the best time to reorder each type of product (called the economic order quantity, or EOQ). I don't want to let too much out of the bag at this point, but there will be an implementation inheritance relationship created with Product as the ancestor class (or superclass) and the other three classes as its descendants (or subclasses). The scenario that follows uses implementation inheritance with a polymorphic example. Note that interface inheritance would yield the same benefits and be implemented in the same fashion.

    To facilitate extensibility and be able to add new products in the future in a sort of plug-and-play fashion, they can make calcEOQ() polymorphic. To do this in Java, Product would define calcEOQ() as abstract, thereby informing any inheriting subclass that it must provide the implementation. A key concept behind polymorphism is this: A class implementing an interface or inheriting from an ancestor class can be treated as an instance of that ancestor class. In the case of a Java interface, the interface itself is a valid type.

    For example, assume that a collection of Product objects is defined as a property of the Inventory class. Inventory will support an operation, getAverageEOQ(), that needs to calculate the average economic order quantity for all products the company sells. To do this requires that they iterate over the collection of Product objects called myProducts to get each object's unique economic order quantity individually, with the goal of getting an average:

    public long getAverageEOQ() { long totalAmount=0; for (int i=0; i < myProducts.length; i++) { totalAmount = totalAmount + myProducts[i].calcEOQ(); } return totalAmount / myProducts.length; }

    But wait! First of all, how can Inventory have a collection of Product objects when the Product class is abstract (no instances were ever created on their own)? Remember the maxim from earlier: Any class implementing an interface or extending from an ancestor class can be treated as an instance of that interface or extended class. A Guitar "is a" Product, SheetMusic "is a" Product, and Supplies "is a" Product. So anywhere you reference Guitar, SheetMusic, or Supplies, you can substitute Product.

    Resident in the array myProducts within the Inventory class are individual concrete Guitar, SheetMusic, and Supplies objects. Java figures out dynamically which object should get its own unique calcEOQ() message. The beauty of this construct is that later, if you add a new type of Product—say, Organ—it will be totally transparent to the Inventory class. That class will still have a collection of Product types, but it will have four different ones instead of three, each of which will have its own unique implementation of the calcEOQ() operation.

    This is polymorphism at its best. At runtime, the class related to the object in question will be identified and the correct "variety" of the operation will be invoked. Polymorphism provides powerful extensibility features to the application by letting future unknown classes implement a predictable and well-conceived interface without affecting how other classes deal with that interface.



    Direct Download of over 5500 Certification Exams

    3COM [8 Certification Exam(s) ]
    AccessData [1 Certification Exam(s) ]
    ACFE [1 Certification Exam(s) ]
    ACI [3 Certification Exam(s) ]
    Acme-Packet [1 Certification Exam(s) ]
    ACSM [4 Certification Exam(s) ]
    ACT [1 Certification Exam(s) ]
    Admission-Tests [13 Certification Exam(s) ]
    ADOBE [93 Certification Exam(s) ]
    AFP [1 Certification Exam(s) ]
    AICPA [2 Certification Exam(s) ]
    AIIM [1 Certification Exam(s) ]
    Alcatel-Lucent [13 Certification Exam(s) ]
    Alfresco [1 Certification Exam(s) ]
    Altiris [3 Certification Exam(s) ]
    Amazon [2 Certification Exam(s) ]
    American-College [2 Certification Exam(s) ]
    Android [4 Certification Exam(s) ]
    APA [1 Certification Exam(s) ]
    APC [2 Certification Exam(s) ]
    APICS [2 Certification Exam(s) ]
    Apple [69 Certification Exam(s) ]
    AppSense [1 Certification Exam(s) ]
    APTUSC [1 Certification Exam(s) ]
    Arizona-Education [1 Certification Exam(s) ]
    ARM [1 Certification Exam(s) ]
    Aruba [8 Certification Exam(s) ]
    ASIS [2 Certification Exam(s) ]
    ASQ [3 Certification Exam(s) ]
    ASTQB [8 Certification Exam(s) ]
    Autodesk [2 Certification Exam(s) ]
    Avaya [101 Certification Exam(s) ]
    AXELOS [1 Certification Exam(s) ]
    Axis [1 Certification Exam(s) ]
    Banking [1 Certification Exam(s) ]
    BEA [5 Certification Exam(s) ]
    BICSI [2 Certification Exam(s) ]
    BlackBerry [17 Certification Exam(s) ]
    BlueCoat [2 Certification Exam(s) ]
    Brocade [4 Certification Exam(s) ]
    Business-Objects [11 Certification Exam(s) ]
    Business-Tests [4 Certification Exam(s) ]
    CA-Technologies [20 Certification Exam(s) ]
    Certification-Board [10 Certification Exam(s) ]
    Certiport [3 Certification Exam(s) ]
    CheckPoint [43 Certification Exam(s) ]
    CIDQ [1 Certification Exam(s) ]
    CIPS [4 Certification Exam(s) ]
    Cisco [318 Certification Exam(s) ]
    Citrix [48 Certification Exam(s) ]
    CIW [18 Certification Exam(s) ]
    Cloudera [10 Certification Exam(s) ]
    Cognos [19 Certification Exam(s) ]
    College-Board [2 Certification Exam(s) ]
    CompTIA [76 Certification Exam(s) ]
    ComputerAssociates [6 Certification Exam(s) ]
    Consultant [2 Certification Exam(s) ]
    Counselor [4 Certification Exam(s) ]
    CPP-Institute [4 Certification Exam(s) ]
    CSP [1 Certification Exam(s) ]
    CWNA [1 Certification Exam(s) ]
    CWNP [13 Certification Exam(s) ]
    CyberArk [1 Certification Exam(s) ]
    Dassault [2 Certification Exam(s) ]
    DELL [11 Certification Exam(s) ]
    DMI [1 Certification Exam(s) ]
    DRI [1 Certification Exam(s) ]
    ECCouncil [22 Certification Exam(s) ]
    ECDL [1 Certification Exam(s) ]
    EMC [128 Certification Exam(s) ]
    Enterasys [13 Certification Exam(s) ]
    Ericsson [5 Certification Exam(s) ]
    ESPA [1 Certification Exam(s) ]
    Esri [2 Certification Exam(s) ]
    ExamExpress [15 Certification Exam(s) ]
    Exin [40 Certification Exam(s) ]
    ExtremeNetworks [3 Certification Exam(s) ]
    F5-Networks [20 Certification Exam(s) ]
    FCTC [2 Certification Exam(s) ]
    Filemaker [9 Certification Exam(s) ]
    Financial [36 Certification Exam(s) ]
    Food [4 Certification Exam(s) ]
    Fortinet [14 Certification Exam(s) ]
    Foundry [6 Certification Exam(s) ]
    FSMTB [1 Certification Exam(s) ]
    Fujitsu [2 Certification Exam(s) ]
    GAQM [9 Certification Exam(s) ]
    Genesys [4 Certification Exam(s) ]
    GIAC [15 Certification Exam(s) ]
    Google [4 Certification Exam(s) ]
    GuidanceSoftware [2 Certification Exam(s) ]
    H3C [1 Certification Exam(s) ]
    HDI [9 Certification Exam(s) ]
    Healthcare [3 Certification Exam(s) ]
    HIPAA [2 Certification Exam(s) ]
    Hitachi [30 Certification Exam(s) ]
    Hortonworks [4 Certification Exam(s) ]
    Hospitality [2 Certification Exam(s) ]
    HP [752 Certification Exam(s) ]
    HR [4 Certification Exam(s) ]
    HRCI [1 Certification Exam(s) ]
    Huawei [21 Certification Exam(s) ]
    Hyperion [10 Certification Exam(s) ]
    IAAP [1 Certification Exam(s) ]
    IAHCSMM [1 Certification Exam(s) ]
    IBM [1533 Certification Exam(s) ]
    IBQH [1 Certification Exam(s) ]
    ICAI [1 Certification Exam(s) ]
    ICDL [6 Certification Exam(s) ]
    IEEE [1 Certification Exam(s) ]
    IELTS [1 Certification Exam(s) ]
    IFPUG [1 Certification Exam(s) ]
    IIA [3 Certification Exam(s) ]
    IIBA [2 Certification Exam(s) ]
    IISFA [1 Certification Exam(s) ]
    Intel [2 Certification Exam(s) ]
    IQN [1 Certification Exam(s) ]
    IRS [1 Certification Exam(s) ]
    ISA [1 Certification Exam(s) ]
    ISACA [4 Certification Exam(s) ]
    ISC2 [6 Certification Exam(s) ]
    ISEB [24 Certification Exam(s) ]
    Isilon [4 Certification Exam(s) ]
    ISM [6 Certification Exam(s) ]
    iSQI [7 Certification Exam(s) ]
    ITEC [1 Certification Exam(s) ]
    Juniper [65 Certification Exam(s) ]
    LEED [1 Certification Exam(s) ]
    Legato [5 Certification Exam(s) ]
    Liferay [1 Certification Exam(s) ]
    Logical-Operations [1 Certification Exam(s) ]
    Lotus [66 Certification Exam(s) ]
    LPI [24 Certification Exam(s) ]
    LSI [3 Certification Exam(s) ]
    Magento [3 Certification Exam(s) ]
    Maintenance [2 Certification Exam(s) ]
    McAfee [8 Certification Exam(s) ]
    McData [3 Certification Exam(s) ]
    Medical [68 Certification Exam(s) ]
    Microsoft [375 Certification Exam(s) ]
    Mile2 [3 Certification Exam(s) ]
    Military [1 Certification Exam(s) ]
    Misc [1 Certification Exam(s) ]
    Motorola [7 Certification Exam(s) ]
    mySQL [4 Certification Exam(s) ]
    NBSTSA [1 Certification Exam(s) ]
    NCEES [2 Certification Exam(s) ]
    NCIDQ [1 Certification Exam(s) ]
    NCLEX [3 Certification Exam(s) ]
    Network-General [12 Certification Exam(s) ]
    NetworkAppliance [39 Certification Exam(s) ]
    NI [1 Certification Exam(s) ]
    NIELIT [1 Certification Exam(s) ]
    Nokia [6 Certification Exam(s) ]
    Nortel [130 Certification Exam(s) ]
    Novell [37 Certification Exam(s) ]
    OMG [10 Certification Exam(s) ]
    Oracle [282 Certification Exam(s) ]
    P&C [2 Certification Exam(s) ]
    Palo-Alto [4 Certification Exam(s) ]
    PARCC [1 Certification Exam(s) ]
    PayPal [1 Certification Exam(s) ]
    Pegasystems [12 Certification Exam(s) ]
    PEOPLECERT [4 Certification Exam(s) ]
    PMI [15 Certification Exam(s) ]
    Polycom [2 Certification Exam(s) ]
    PostgreSQL-CE [1 Certification Exam(s) ]
    Prince2 [6 Certification Exam(s) ]
    PRMIA [1 Certification Exam(s) ]
    PsychCorp [1 Certification Exam(s) ]
    PTCB [2 Certification Exam(s) ]
    QAI [1 Certification Exam(s) ]
    QlikView [1 Certification Exam(s) ]
    Quality-Assurance [7 Certification Exam(s) ]
    RACC [1 Certification Exam(s) ]
    Real Estate [1 Certification Exam(s) ]
    Real-Estate [1 Certification Exam(s) ]
    RedHat [8 Certification Exam(s) ]
    RES [5 Certification Exam(s) ]
    Riverbed [8 Certification Exam(s) ]
    RSA [15 Certification Exam(s) ]
    Sair [8 Certification Exam(s) ]
    Salesforce [5 Certification Exam(s) ]
    SANS [1 Certification Exam(s) ]
    SAP [98 Certification Exam(s) ]
    SASInstitute [15 Certification Exam(s) ]
    SAT [1 Certification Exam(s) ]
    SCO [10 Certification Exam(s) ]
    SCP [6 Certification Exam(s) ]
    SDI [3 Certification Exam(s) ]
    See-Beyond [1 Certification Exam(s) ]
    Siemens [1 Certification Exam(s) ]
    Snia [7 Certification Exam(s) ]
    SOA [15 Certification Exam(s) ]
    Social-Work-Board [4 Certification Exam(s) ]
    SpringSource [1 Certification Exam(s) ]
    SUN [63 Certification Exam(s) ]
    SUSE [1 Certification Exam(s) ]
    Sybase [17 Certification Exam(s) ]
    Symantec [135 Certification Exam(s) ]
    Teacher-Certification [4 Certification Exam(s) ]
    The-Open-Group [8 Certification Exam(s) ]
    TIA [3 Certification Exam(s) ]
    Tibco [18 Certification Exam(s) ]
    Trainers [3 Certification Exam(s) ]
    Trend [1 Certification Exam(s) ]
    TruSecure [1 Certification Exam(s) ]
    USMLE [1 Certification Exam(s) ]
    VCE [6 Certification Exam(s) ]
    Veeam [2 Certification Exam(s) ]
    Veritas [33 Certification Exam(s) ]
    Vmware [58 Certification Exam(s) ]
    Wonderlic [2 Certification Exam(s) ]
    Worldatwork [2 Certification Exam(s) ]
    XML-Master [3 Certification Exam(s) ]
    Zend [6 Certification Exam(s) ]





    References :


    Dropmark : http://killexams.dropmark.com/367904/11675412
    Wordpress : http://wp.me/p7SJ6L-14F
    Issu : https://issuu.com/trutrainers/docs/000-634
    Dropmark-Text : http://killexams.dropmark.com/367904/12155518
    Blogspot : http://killexamsbraindump.blogspot.com/2017/11/free-pass4sure-000-634-question-bank_15.html
    RSS Feed : http://feeds.feedburner.com/WhereCanIGetHelpToPass000-634Exam
    Box.net : https://app.box.com/s/1qprrxdvstyb3rildp77p0yo5esm9a5y
    publitas.com : https://view.publitas.com/trutrainers-inc/000-634
    zoho.com : https://docs.zoho.com/file/5r1nh6574f65ec73c4bbea02b82a3d17570da
    Calameo : http://en.calameo.com/books/004923526de9afc52e316






    Back to Main Page





    Killexams exams | Killexams certification | Pass4Sure questions and answers | Pass4sure | pass-guaratee | best test preparation | best training guides | examcollection | killexams | killexams review | killexams legit | kill example | kill example journalism | kill exams reviews | kill exam ripoff report | review | review quizlet | review login | review archives | review sheet | legitimate | legit | legitimacy | legitimation | legit check | legitimate program | legitimize | legitimate business | legitimate definition | legit site | legit online banking | legit website | legitimacy definition | pass 4 sure | pass for sure | p4s | pass4sure certification | pass4sure exam | IT certification | IT Exam | certification material provider | pass4sure login | pass4sure exams | pass4sure reviews | pass4sure aws | pass4sure security | pass4sure cisco | pass4sure coupon | pass4sure dumps | pass4sure cissp | pass4sure braindumps | pass4sure test | pass4sure torrent | pass4sure download | pass4surekey | pass4sure cap | pass4sure free | examsoft | examsoft login | exams | exams free | examsolutions | exams4pilots | examsoft download | exams questions | examslocal | exams practice |

    www.pass4surez.com | www.killcerts.com | www.search4exams.com | http://smresidences.com.ph/