现有课程

This course teaches techniques for the design and analysis of efficient algorithms, emphasizing methods useful in practice. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; caching; and parallel computing.

Topics include: implementing classes (non-utilities, delegation within the class definition, documentation and API generation, implementing contracts), aggregations (implementing aggregates versus compositions and implementing collections), inheritance hierarchies (attribute visibility, overriding methods, abstract classes versus interfaces, inner classes), applications of aggregation and inheritance in concurrent programming and event-driven programming, recursion, searching and sorting including quick and merge sorts), stacks and queues, linked lists, and binary trees.

This course provides a first exposure to object-oriented programming and enhances student understanding of key computing skills such as reasoning about algorithms, designing user interfaces, and working with software tools. It uses problem-based approach to expose the underlying concepts and an experiential laboratory to implement them. A mature mobile software infrastructure (such as Java and the Android programming environment) is used to expose and provide context to the underlying ideas. Laboratory exercises expose students to a range of real-world problems with a view of motivating computational thinking and grounding the material covered in lectures.

Object-Oriented Programming



欢迎来到2019暑期 Ututor网课公开课

我们将于五月的第一个周末邀请大家线上观看课程直播。

详情请咨询微信:L-225544

This course introduces students to computing through technologies used for client-side web development. Students will be introduced to the basics of HTML, CSS, Forms, and Javascript. This course provides a "big picture" of how these technologies work together to realize the world wide web (WWW).

To learn the syntax and semantics of propositional and predicate logic.  The proper understanding of propositional logic is fundamental to the most basic levels of computer programming, while the ability to correctly use variables, scope and quantifiers is crucial in the use of loops, subroutines, and modules, and in software design. Logic is used in many diverse areas of computer science including digital design, program verification, databases, artificial intelligence, algorithm analysis, and software specification. We will not follow a classical treatment of logic. Instead we will use an "equational'' treatment. This equational approach will also be the basis for the topics in discrete mathematics treated in MATH 2090.

We will learn a notion of proof within the context of a system of propositional logic.  You will need to be able to translate certain types of statements in English into logical statements as well as understand the concept of a propositional statement being valid or satisfiable.  By the end of the course you should be able to deduce theorems using a system of proofs based on rules of deduction using logical equivalence.  We will also try to relate these notions to logical puzzles, arguments made in English, digital circuits and computer programing.


Topics include systems of linear equations, general matrix algebra, determinants, vector space concepts for Euclidean n-space (e.g., linear dependence and independence, basis, dimension, linear transformations, etc.) and an introduction to eigenvalues and eigenvectors. This course is particularly appropriate for students taking Science or Engineering programs which require one term’s worth of linear algebra.

This course introduces software tools that are used for building applications and in the software development process. It covers ANSI-C (stdio, pointers, memory management, overview of ANSI-C libraries), Shell programming including filters and pipes (shell redirection, grep, sort & uniq, tr, sed, awk, pipes in C), Version control systems and the make mechanism, and debugging and testing. All of the above are applied in practical programming assignments.

CSE2021 is a unique course in that it bridges the gap between software (S/W) and hardware (H/W) and exposes the roles played by the operating system (O/S) and the digital logic (D/L) circuits. It relies on a hierarchy of abstractions to present the material in layers, switching roles from “using” to “implementing” at every stage. It follows the journey of instructions from high-level to assembly and machine code, through the stack, the heap, and the caches, to the the CPU's datapath and control. The lecture coverage is augmented by labs that provide hands-on experience in MIPS and Verilog.

his course introduces fundamental data structures and the underlying widely-used algorithms. They include various implementations of arrays, lists, maps, hash tables, priority queues, search trees, graphs, and their algorithmic applications. We express these structures in an Object-Oriented Programming (OOP) context and use the Java Programming Language for this purpose.

The course discusses a number of key concepts in OOP. Abstraction and encapsulation are two such concepts. Abstraction at the data level gives rise to expressing a data structure as an Abstract Data Type (ADT). The concept of data abstraction (ADT) predates OOP. OOP adopts a higher level of abstraction, namely objects. A data structure, like any other abstracted entity, is encapsulated as an object with state (data) and behaviour (functionality). An object is an instance of its class type. This facilitates a higher level of procedural abstraction: hierarchical inheritance & polymorphism. Parameters in method calls can now be objects of any specified type, possessing not only pure data, but also specified functional behaviour.

An ADT's client is any (user application) class that accesses and invokes the ADT. Through encapsulation, a client can directly access only externally visible members of the ADT, namely its Application Programming Interface (API), and is oblivious to the internal details, hence to any particular implementation, of the ADT. The interaction between the client and the ADT implementation is through this API which acts as a contract between them. This contract is expressed by public & protected class member signatures, pre/post conditions, and invariants. Implementing an API means implementing the corresponding ADT that respects the API contract. An important benefit is code flexibility: the ADT implementation can be changed and improved over time without changing its API, and hence, without breaking any client code.