BE Computer Engineering (IOE, TU) Object Oriented Analysis and Design (IOE, CT 651) Question Paper 2078 Nepal
This is the official BE Computer Engineering (IOE, TU) Object Oriented Analysis and Design (IOE, CT 651) question paper for 2078, as set in the regular annual examination. It carries 80 full marks and a time allowance of 180 minutes, across 12 questions. On Kekkei you can attempt this Object Oriented Analysis and Design (IOE, CT 651) past paper online with a timer, get instant AI feedback and step-by-step solutions, and track the topics where you lose marks — completely free. Whether you are revising for your BE Computer Engineering (IOE, TU) Object Oriented Analysis and Design (IOE, CT 651) exam or solving previous years' question papers, this 2078 paper is a great way to practise under real exam conditions.
Section A: Long Answer Questions
Attempt all / any as specified.
Define object orientation and explain the core principles of the object-oriented paradigm. (a) With suitable examples, distinguish between abstraction, encapsulation, inheritance and polymorphism. (b) Why is the object-oriented approach generally considered more suitable than the structured/procedural approach for modeling large, evolving software systems? Justify your answer with at least three concrete advantages.
Object Orientation
Object orientation is a software-development paradigm that models a system as a collection of interacting objects, where each object bundles together data (attributes/state) and the behaviour (operations/methods) that act on that data. A class is the blueprint from which objects (instances) are created.
Core principles of the OO paradigm
The four pillars are abstraction, encapsulation, inheritance and polymorphism.
(a) The four core concepts
| Concept | Meaning | Example |
|---|---|---|
| Abstraction | Showing only the essential features of an entity while hiding unnecessary detail; focuses on what an object does, not how. | A Car exposes start(), accelerate(), brake() — the driver need not know the internal combustion mechanics. |
| Encapsulation | Binding data and the methods operating on it into a single unit and restricting direct access using access modifiers (private, public). Provides information hiding. | A BankAccount keeps balance private; it can only be changed through deposit() / withdraw(), which enforce validation. |
| Inheritance | A new class (subclass/derived) acquires the attributes and operations of an existing class (superclass/base), enabling reuse and an is-a hierarchy. | SavingsAccount inherits from Account and adds interestRate. |
| Polymorphism | The same operation behaves differently depending on the object that invokes it (overriding) or the argument types (overloading); one interface, many forms. | shape.area() returns the correct area whether shape is a Circle, Rectangle or Triangle. |
Key distinctions: Abstraction is a design-level idea (what to expose); encapsulation is the implementation mechanism (how it is hidden). Inheritance establishes relationships between classes for reuse; polymorphism exploits those relationships so that client code works uniformly across a family of types.
(b) Why OO is more suitable than the structured/procedural approach for large, evolving systems
- Modularity & maintainability — Behaviour is localized inside the objects that own the data. A change to how a
Customeris stored affects only theCustomerclass, not scattered functions, so the system is easier to modify and debug as it grows. - Reusability — Inheritance, composition and design patterns let existing, tested classes be reused across projects, reducing development effort and duplication, whereas procedural code tends to copy-paste logic.
- Extensibility (resilience to change) — New requirements are met by adding new subclasses and overriding behaviour (open–closed principle) without modifying existing code. Polymorphism lets new types plug into existing client code seamlessly.
- Better real-world mapping & data integrity — Objects map naturally onto real-world entities (Member, Book, Account), making models intuitive; encapsulation protects invariants, which is critical in large teams.
In the structured approach, data and functions are separated and global data is shared widely, so a small change can ripple unpredictably through the whole program — this becomes unmanageable as systems scale.
Consider a Library Management System in which members borrow and return books, a librarian manages the catalogue, and fines are computed for overdue items. (a) Identify the actors and at least five use cases, and draw a complete use case diagram showing <<include>> and <<extend>> relationships where appropriate. (b) Write a fully-dressed (expanded) use case description for the Borrow Book use case, including the main success scenario and at least two alternative/exception flows. (c) Draw a class diagram for the system identifying the key classes, their attributes, operations, and the associations (with multiplicities) between them.
Library Management System
(a) Actors, use cases and use case diagram
Actors: Member (borrows/returns books, pays fines), Librarian (manages catalogue, issues/returns), System Clock/Timer (optional, for overdue detection).
Use cases (≥5): Search Catalogue, Borrow Book, Return Book, Manage Catalogue (add/update/remove book), Compute Fine, Pay Fine, Register Member.
Use case diagram (described):
┌───────────────── Library System ─────────────────┐
│ │
Member ───┼──> (Search Catalogue) │
│ │
Member ───┼──> (Borrow Book) ----<<include>>--> (Verify │
│ | Membership)│
│ '----<<include>>--> (Check Availability)│
│ │
Member ───┼──> (Return Book) ----<<extend>>--> (Compute Fine)│
│ │
Member ───┼──> (Pay Fine) │
│ │
Librarian──┼──> (Manage Catalogue) │
Librarian──┼──> (Register Member) │
└──────────────────────────────────────────────────┘
Borrow Book<<include>>Verify MembershipandCheck Availability— these sub-behaviours are always performed as part of borrowing.Return Book<<extend>>Compute Fine— fine computation happens only when the item is overdue (a conditional extension).
(b) Fully-dressed use case: Borrow Book
| Field | Description |
|---|---|
| Use case | Borrow Book |
| Primary actor | Member |
| Stakeholders | Member (wants the book), Library (wants to track inventory) |
| Preconditions | Member is registered and authenticated; book copy exists in catalogue. |
| Postconditions | Loan record created; book copy marked issued; due date set. |
Main success scenario:
- Member presents membership card and the book to be borrowed.
- System verifies the membership is valid and active (
<<include>> Verify Membership). - System checks the book copy is available (
<<include>> Check Availability). - System checks the member has not exceeded the borrowing limit and has no blocking unpaid fines.
- System creates a loan record, sets the due date, and marks the copy as issued.
- System issues a receipt/confirmation to the member.
Alternative / exception flows:
- 2a. Membership invalid or expired: System notifies the member and aborts; the book is not issued.
- 4a. Borrowing limit exceeded or unpaid fine above threshold: System refuses the loan and prompts the member to return books or clear fines.
- 3a. Copy unavailable / already issued: System informs the member and offers to place a reservation/hold.
(c) Class diagram (described)
Member Loan Book
---------- ------------ ----------
-memberId -loanId -isbn
-name -issueDate -title
-address -dueDate -author
-active:bool -returnDate -copiesAvailable
+borrow() +calcFine():double +isAvailable()
+returnBook() +isOverdue():bool +updateStock()
+payFine()
│ 1 │ * 1 │
└───────< 1 *>─────┘─────────┘
Member 1 ── * Loan Loan * ── 1 Book
Librarian Fine
----------- ------------
-staffId -amount
-name -paid:bool
+manageCatalogue() +pay()
+issueBook()
Loan 1 ── 0..1 Fine
Associations with multiplicities:
Member "1" ── "*" Loan: one member can have many loans.Book "1" ── "*" Loan: one book (copy) appears in many loans over time.Loan "1" ── "0..1" Fine: a loan may generate at most one fine (only if overdue).LibrarianmanagesBook(catalogue) and processesLoanrecords.
(a) Explain the purpose of interaction diagrams in UML and clearly differentiate between a sequence diagram and a collaboration (communication) diagram in terms of notation and what each emphasizes. (b) For an ATM Cash Withdrawal scenario (card inserted, PIN verified, amount entered, balance checked, cash dispensed), draw a sequence diagram showing the objects involved and the messages exchanged, including the failure case when the entered amount exceeds the available balance.
Interaction Diagrams
(a) Purpose and sequence vs collaboration diagram
Interaction diagrams model how objects collaborate by exchanging messages to realize a use case or operation. They capture the dynamic behaviour of a system. UML provides two equivalent forms — sequence and communication (collaboration) diagrams.
| Aspect | Sequence diagram | Collaboration (Communication) diagram |
|---|---|---|
| Emphasizes | The time ordering of messages | The structural organisation (links) of objects |
| Notation | Objects across the top, vertical dashed lifelines, activation bars, horizontal message arrows top-to-bottom | Objects as boxes connected by links; messages shown along links with sequence numbers (1, 1.1, 2…) |
| Reading order | Top to bottom = chronological | Follow the numeric sequence labels |
| Best for | Visualising the sequence/flow over time | Visualising which objects talk to which |
| Equivalence | Both convey the same information; UML lets you convert one to the other |
(b) Sequence diagram: ATM Cash Withdrawal (with insufficient-balance failure)
Objects involved: :Customer, :ATM, :CardReader, :Bank (server), :Account.
Customer ATM CardReader Bank Account
│ │ │ │ │
│ insertCard() │ │ │
│────────>│ readCard() │ │ │
│ │─────────────>│ │ │
│ enterPIN() │ │ │
│────────>│ validatePIN(pin) │ │
│ │─────────────────────────>│ │
│ │<───── PIN OK ─────────────│ │
│ enterAmount(amt) │ │ │
│────────>│ requestWithdraw(amt) │ │
│ │─────────────────────────>│ getBalance()│
│ │ │────────────>│
│ │ │<── balance ──│
│ │ │ │
│ ── alt [amt <= balance] ─────────────────────── │
│ │ │ debit(amt) │
│ │ │────────────>│
│ │<──── approved ───────────│ │
│<─ dispenseCash(amt) ─ │ │ │
│ ── else [amt > balance] (FAILURE) ───────────── │
│ │<── insufficientFunds ────│ │
│<─ showError("Insufficient balance")│ │
│ ── end alt ──────────────────────────────────── │
│ ejectCard() │ │ │
│<────────│ │ │ │
Explanation: Messages flow top-to-bottom in time order. After the balance is fetched, an alt combined fragment branches: if amt <= balance the account is debited and cash dispensed; in the failure case amt > balance, the bank returns insufficientFunds and the ATM displays an error without dispensing cash. Finally the card is ejected in both paths.
Design patterns provide reusable solutions to recurring design problems. (a) Explain the classification of GoF design patterns into creational, structural and behavioural categories, giving one example pattern from each. (b) Describe the Observer pattern: state the problem it solves, draw its UML class diagram (participants and relationships), and give one real-world software scenario where it is applicable.
Design Patterns (GoF)
(a) Classification of GoF patterns
The 23 Gang-of-Four patterns are grouped by purpose into three categories:
| Category | Concern | Example pattern |
|---|---|---|
| Creational | How objects are created — abstract and control the instantiation process to increase flexibility and reuse. | Singleton (also Factory Method, Abstract Factory, Builder, Prototype) |
| Structural | How classes and objects are composed into larger structures while keeping them flexible. | Adapter (also Bridge, Composite, Decorator, Facade, Proxy, Flyweight) |
| Behavioural | How objects interact and distribute responsibility/communication among themselves. | Observer (also Strategy, Command, State, Iterator, Template Method) |
(b) Observer pattern
Problem it solves: When one object (the subject) changes state, a varying number of dependent objects (observers) must be notified and updated automatically — without the subject being tightly coupled to the concrete observers. It defines a one-to-many dependency between objects.
Participants:
Subject— maintains a list of observers; providesattach(),detach(),notify().Observer— defines theupdate()interface.ConcreteSubject— stores state of interest; callsnotify()on change.ConcreteObserver— implementsupdate()to keep itself consistent with the subject.
UML class diagram (described):
Subject Observer (interface)
------------- ----------------
-observers: List<Observer> o───> +update()
+attach(o) △
+detach(o) │ implements
+notify() │
△ ConcreteObserver
│ extends ----------------
ConcreteSubject ----observes----> -observerState
--------------- +update()
-subjectState
+getState()/+setState()
Subjectaggregates manyObservers (1-to-*).notify()iterates the observer list and callsupdate()on each.ConcreteObserverholds a reference back toConcreteSubjectto query its new state.
Real-world scenario: A spreadsheet / stock-ticker GUI: a data model (subject) is observed by several views — a bar chart, a table and a pie chart. When the underlying data changes, all charts refresh automatically. Other examples: event-listener mechanisms in GUIs, and publish–subscribe / model-view in MVC frameworks.
Section B: Short Answer Questions
Attempt all / any as specified.
With suitable examples, differentiate between association, aggregation and composition. Show how each is represented in a UML class diagram and explain how their lifetime/ownership semantics differ.
Association vs Aggregation vs Composition
All three are structural relationships between classes; they differ in the strength of the connection and in ownership/lifetime semantics.
| Relationship | Meaning | UML notation | Lifetime / ownership |
|---|---|---|---|
| Association | A general "uses-a / knows-a" link where objects of one class are related to objects of another, but neither owns the other. | A plain solid line (optionally with multiplicity and role names; an arrow shows navigability). | Independent lifetimes — neither object controls the other's existence. |
| Aggregation | A "has-a" / whole–part relationship where the part can exist independently of the whole (weak ownership). | Solid line with a hollow (open) diamond at the whole end. | Shared/weak ownership — deleting the whole does not destroy the parts. |
| Composition | A strong "part-of" relationship; the part cannot exist without the whole (strong ownership, exclusive). | Solid line with a filled (solid) diamond at the whole end. | Strong ownership — the part's lifetime is bound to the whole; deleting the whole deletes its parts. |
Examples:
- Association:
Student——Course. A student takes courses and a course has students, but they exist independently. - Aggregation:
Department◇——Professor. A department has professors, but a professor still exists if the department is dissolved (can move elsewhere). - Composition:
House◆——Room. Rooms are part of a house; if the house is demolished, its rooms cease to exist.
Summary: Association < Aggregation < Composition in coupling strength. Aggregation and composition are special kinds of association; composition implies exclusive ownership and coincident lifetime, aggregation does not.
Draw a state (statechart) diagram for an Order object in an online shopping system that moves through states such as Created, Confirmed, Shipped, Delivered and Cancelled. Clearly label the states, transitions, events and guard conditions.
Statechart Diagram for an Order Object
A statechart shows the states of a single object, the events/transitions that move it between states, and guard conditions on those transitions.
● (initial)
│ placeOrder
▼
┌──────────┐ confirmPayment [payment == success] ┌───────────┐
│ Created │ ─────────────────────────────────────> │ Confirmed │
└──────────┘ └───────────┘
│ │
│ cancel ship [stockAvailable]
▼ ▼
┌──────────┐ <──── cancel [before shipment] ──── ┌──────────┐
│ Cancelled│ │ Shipped │
└──────────┘ └──────────┘
│ │ deliver
▼ ▼
⊙ (final) ┌───────────┐
│ Delivered │
└───────────┘
│
▼
⊙ (final)
States: Created, Confirmed, Shipped, Delivered, Cancelled.
Transitions (event [guard] / action):
- initial →
Created: onplaceOrder. Created→Confirmed: onconfirmPayment[payment == success].Created→Cancelled: oncancel.Confirmed→Shipped: onship[stockAvailable].Confirmed→Cancelled: oncancel[before shipment].Shipped→Delivered: ondeliver.Delivered→ final state;Cancelled→ final state.
The guard conditions (in square brackets) ensure a transition fires only when the condition is true — e.g., an order can only ship if stockAvailable, and can only be cancelled before it has shipped.
Draw an activity diagram for the process of withdrawing money from an ATM. Use appropriate notation for the initial/final nodes, decision (branch) and merge nodes, and show at least one fork/join to represent concurrent activities.
Activity Diagram: Withdraw Money from an ATM
An activity diagram models the workflow/control flow of a process using initial/final nodes, actions, decision/merge nodes and fork/join bars for concurrency.
● (initial)
│
[Insert Card]
│
[Read Card & Prompt PIN]
│
[Enter PIN]
│
◇ <PIN valid?>
├── No ──> [Show "Invalid PIN"] ──┐
│ │
└── Yes │
│ (merge)
[Enter Withdrawal Amount] │
│ │
◇ <Amount <= Balance?> │
├── No ──> [Show "Insufficient"] ──┤
│ │
└── Yes │
│ ◇ (merge)
═══════╪═══════ (FORK - concurrent) │
│ │ │
[Dispense Cash] [Update Account Balance] │
│ │ │
═══════╪═══════ (JOIN) │
│ │
[Print Receipt] │
│ │
[Eject Card] <───────────────────────────┘
│
⊙ (final)
Notation used:
- Initial node ● and final node ⊙.
- Action nodes: rounded rectangles (Insert Card, Enter PIN, Dispense Cash, etc.).
- Decision (branch) nodes ◇ with guard conditions
[PIN valid?]and[Amount <= Balance?]; failing branches flow to error actions. - Merge nodes ◇ recombine the alternate flows so the card is ejected in all cases.
- Fork / Join (the double bars
═══): after a valid amount, Dispense Cash and Update Account Balance happen concurrently, then synchronise at the join before printing the receipt.
State and briefly explain any four of the SOLID object-oriented design principles. For the Single Responsibility Principle, give one short example of a class that violates it and how it can be refactored.
SOLID Design Principles
SOLID is an acronym for five OO design principles that make software easier to maintain and extend.
- S — Single Responsibility Principle (SRP): A class should have only one reason to change, i.e. exactly one responsibility. This keeps classes focused and reduces ripple effects when requirements change.
- O — Open/Closed Principle (OCP): Software entities should be open for extension but closed for modification — add new behaviour by adding new code (e.g. subclasses/strategies), not by editing existing, tested code.
- L — Liskov Substitution Principle (LSP): Objects of a subclass must be substitutable for their base class without breaking correctness; a subtype must honour the contract of its supertype.
- I — Interface Segregation Principle (ISP): Clients should not be forced to depend on interfaces they do not use; prefer many small, specific interfaces over one large "fat" interface.
- D — Dependency Inversion Principle (DIP): High-level modules should depend on abstractions, not on concrete low-level details; both should depend on interfaces.
(Any four of the above are required.)
SRP example — violation and refactoring
Violation — a class doing two unrelated jobs:
class Employee {
void calculateSalary() { /* business logic */ }
void saveToDatabase() { /* persistence logic */ }
void generateReport() { /* reporting/printing logic */ }
}
This class changes if salary rules change, or if the database changes, or if the report format changes — three reasons to change.
Refactored — split responsibilities:
class Employee { void calculateSalary() { ... } } // domain logic
class EmployeeRepository { void save(Employee e) { ... } } // persistence
class EmployeeReport { void generate(Employee e) { ... } } // reporting
Now each class has a single responsibility and a single reason to change.
UML defines several diagram types grouped into structural and behavioural views. (a) List any four structural and four behavioural UML diagrams. (b) Briefly explain the purpose of an object diagram and how it differs from a class diagram.
UML Diagram Types
(a) Structural and behavioural diagrams
Structural (static) diagrams — show the static structure/parts of a system:
- Class diagram
- Object diagram
- Component diagram
- Deployment diagram (also Package diagram, Composite Structure diagram, Profile diagram)
Behavioural (dynamic) diagrams — show the dynamic behaviour/interactions:
- Use case diagram
- Sequence diagram
- Activity diagram
- State (statechart) machine diagram (also Communication, Interaction Overview, Timing diagrams)
(b) Object diagram and how it differs from a class diagram
An object diagram shows a snapshot of the system at a particular instant: actual instances of classes (objects) with concrete attribute values and the links between them. It is essentially an instance of a class diagram at run time.
| Class diagram | Object diagram |
|---|---|
| Shows classes (types) — a general blueprint | Shows objects (instances) — a specific snapshot |
| Contains attributes, operations, multiplicities | Contains attribute values (no operations) |
Notation: ClassName | Notation: objectName : ClassName (underlined) |
| Valid for the whole lifetime of the system | Valid only at one moment in time |
Example: A class diagram has a Student class with attribute name; the object diagram shows ram : Student with name = "Ram" linked to cs101 : Course.
Explain the concept of use case generalization, <<include>> and <<extend>> relationships with a small example of each. When would you prefer <<extend>> over <<include>>?
Use Case Relationships
Use case generalization
One use case (child) inherits and specializes the behaviour of a parent use case — an is-a relationship between use cases. Shown by a solid line with a hollow triangle pointing to the parent.
Example: Pay by Card and Pay by Cash are specialized children of a general Make Payment use case.
<<include>>
The base use case always incorporates the behaviour of the included use case; the included behaviour is mandatory and is typically common functionality factored out to avoid duplication. Arrow points from base to the included use case.
Example: Withdraw Cash <<include>> Authenticate User — every withdrawal must authenticate.
<<extend>>
The extending use case adds optional/conditional behaviour to a base use case at a defined extension point; the base use case is complete on its own and the extension runs only when a condition holds. Arrow points from the extension to the base use case.
Example: Withdraw Cash is **<<extend>>**ed by Print Receipt — printing a receipt happens only if the user requests it.
When to prefer <<extend>> over <<include>>
Use <<extend>> when the additional behaviour is optional, conditional, or exceptional and the base use case must remain meaningful without it (e.g. an error handler or an extra feature triggered only in some scenarios). Use <<include>> when the behaviour is always required and shared by multiple use cases.
<<include>> | <<extend>> | |
|---|---|---|
| Execution | Always | Conditional/optional |
| Direction | Base → Included | Extension → Base |
| Purpose | Reuse mandatory common behaviour | Add optional/exceptional behaviour |
Compare the Factory Method and Abstract Factory creational patterns. Explain, with a brief example, the type of problem each is intended to solve and how they differ in structure and intent.
Factory Method vs Abstract Factory
Both are creational patterns that decouple client code from the concrete classes it instantiates, but they differ in scope and structure.
Factory Method
- Intent: Define an interface (a factory method) for creating an object, but let subclasses decide which concrete class to instantiate. Creation of one product is deferred to subclasses.
- Structure: A
Creatordeclares the abstract methodcreateProduct(); eachConcreteCreatoroverrides it to return a specificProduct. Uses inheritance. - Example: A
Dialogclass hascreateButton();WindowsDialogreturns aWindowsButton,WebDialogreturns anHtmlButton.
Abstract Factory
- Intent: Provide an interface for creating families of related/dependent objects without specifying their concrete classes — ensures the products used together are compatible.
- Structure: An
AbstractFactorydeclares multiple creation methods (one per product). EachConcreteFactoryproduces a whole family of products. Often uses object composition and internally several factory methods. - Example: A
GUIFactorywithcreateButton()andcreateCheckbox();WindowsFactoryproduces Windows-style button + checkbox,MacFactoryproduces Mac-style button + checkbox — guaranteeing a consistent look.
Key differences
| Aspect | Factory Method | Abstract Factory |
|---|---|---|
| Products created | A single product | A family of related products |
| Mechanism | Inheritance (subclass overrides one method) | Composition (factory object with many methods) |
| Granularity | One creation method | Many creation methods grouped |
| Use when | Subclasses must choose the concrete type | You must keep a set of related products consistent |
In short, Abstract Factory is often implemented using several Factory Methods; Factory Method handles one product, Abstract Factory handles whole families.
Write short notes on any two of the following:
(a) Coupling and cohesion in object-oriented design
(b) The Singleton design pattern
(c) GRASP responsibility-assignment patterns
Short Notes (any two)
(a) Coupling and Cohesion
Cohesion measures how strongly the responsibilities of a single module/class are related; high cohesion (a class doing one well-defined job) is desirable because it improves readability, reuse and maintainability. Coupling measures the degree of interdependence between modules/classes; low (loose) coupling is desirable because changes in one class then have minimal impact on others. Good OO design aims for high cohesion and low coupling, e.g. by programming to interfaces and reducing direct dependencies.
(b) Singleton Design Pattern
A creational pattern that ensures a class has exactly one instance and provides a global point of access to it. It is implemented by making the constructor private and exposing a static getInstance() method that lazily creates and returns the single object.
class Logger {
private static Logger instance;
private Logger() {}
public static Logger getInstance() {
if (instance == null) instance = new Logger();
return instance;
}
}
Typical uses: logging, configuration managers, database-connection pools, caches. (Thread safety must be handled, e.g. with synchronization or eager initialization.)
(c) GRASP Patterns
GRASP (General Responsibility Assignment Software Patterns) are nine principles by Craig Larman that guide which class should be assigned a given responsibility during OO design:
- Information Expert — assign a responsibility to the class that has the information needed to fulfil it.
- Creator — the class that aggregates/contains B should create B.
- Controller — assign handling of system events to a controller class.
- Low Coupling and High Cohesion — keep dependencies low and responsibilities focused.
- Others: Polymorphism, Pure Fabrication, Indirection, Protected Variations.
GRASP provides the reasoning behind responsibility assignment, complementing the GoF design patterns.
Frequently asked questions
- Where can I find the BE Computer Engineering (IOE, TU) Object Oriented Analysis and Design (IOE, CT 651) question paper 2078?
- The full BE Computer Engineering (IOE, TU) Object Oriented Analysis and Design (IOE, CT 651) 2078 (regular) question paper is available free on Kekkei. You can read every question online and attempt the paper under timed exam conditions.
- Does the Object Oriented Analysis and Design (IOE, CT 651) 2078 paper come with solutions?
- Yes. Every question on this Object Oriented Analysis and Design (IOE, CT 651) past paper includes a step-by-step solution, plus instant AI feedback when you attempt it on Kekkei.
- How many marks is the BE Computer Engineering (IOE, TU) Object Oriented Analysis and Design (IOE, CT 651) 2078 paper?
- The BE Computer Engineering (IOE, TU) Object Oriented Analysis and Design (IOE, CT 651) 2078 paper carries 80 full marks and is meant to be completed in 180 minutes, across 12 questions.
- Is practising this Object Oriented Analysis and Design (IOE, CT 651) past paper free?
- Yes — reading and attempting this Object Oriented Analysis and Design (IOE, CT 651) past paper on Kekkei is completely free.